{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Привет, меня зовут Артем. Сегодня я проверю твой проект.\n",
    "<br> Дальнейшее общение будет происходить на \"ты\" если это не вызывает никаких проблем.\n",
    "<br> Желательно реагировать на каждый мой комментарий ('исправил', 'не понятно как исправить ошибку', ...)\n",
    "<br> Пожалуйста, не удаляй комментарии ревьюера, так как они повышают качество повторного ревью.\n",
    "\n",
    "Комментарии будут в <font color='green'>зеленой</font>, <font color='blue'>синей</font> или <font color='red'>красной</font> рамках:\n",
    "\n",
    "<div class=\"alert alert-block alert-success\">\n",
    "<b>Успех:</b> Если все сделано отлично\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-info\">\n",
    "<b>Совет: </b> Если можно немного улучшить\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-danger\">\n",
    "<b>Ошибка:</b> Если требуются исправления. Работа не может быть принята с красными комментариями.\n",
    "</div>\n",
    "\n",
    "-------------------\n",
    "\n",
    "Будет очень хорошо, если ты будешь помечать свои действия следующим образом:\n",
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Комментарий студента:</b> ...\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Изменения:</b> Были внесены следующие изменения ...\n",
    "</div>\n",
    "\n",
    "### <font color='orange'>Общее впечатление</font>\n",
    "* Большое спасибо за проделанную работу. Видно, что приложено много усилий.\n",
    "* Выводы и рассуждения получились содержательными, их было интересно читать.\n",
    "* Над этим проектом нужно будет еще немного поработать. Однако, изменения не должны занять много времени.\n",
    "* В работе я оставил несколько советов. Буду рад, если ты учтешь их.\n",
    "* С радостью отвечу на твои вопросы, если они есть. Лучше всего их собрать в следующей ячейке. Жду новую версию проекта.\n",
    "\n",
    "<div class=\"alert alert-block alert-warning\", padding: 15px\">\n",
    "<strong>Комментарий студента:</strong>\n",
    "    Привет! Меня зовут Александр, приятно познакомиться! Буду рад улучшить свою работу с твоей помощью.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### <font color='orange'>Общее впечатление (ревью 2)</font>\n",
    "* После исправлений проект улучшился и теперь он может быть зачтен.\n",
    "* Для удобства все новые комментарии обозначены фразой \"ревью 2\".\n",
    "* Удачи в дальнейшем обучении и следующих работах!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Выбор локации для скважины"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Допустим, вы работаете в добывающей компании «ГлавРосГосНефть». Нужно решить, где бурить новую скважину.\n",
    "\n",
    "Вам предоставлены пробы нефти в трёх регионах: в каждом 10 000 месторождений, где измерили качество нефти и объём её запасов. Постройте модель машинного обучения, которая поможет определить регион, где добыча принесёт наибольшую прибыль. Проанализируйте возможную прибыль и риски техникой *Bootstrap.*\n",
    "\n",
    "Шаги для выбора локации:\n",
    "\n",
    "- В избранном регионе ищут месторождения, для каждого определяют значения признаков;\n",
    "- Строят модель и оценивают объём запасов;\n",
    "- Выбирают месторождения с самым высокими оценками значений. Количество месторождений зависит от бюджета компании и стоимости разработки одной скважины;\n",
    "- Прибыль равна суммарной прибыли отобранных месторождений."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Загрузка и подготовка данных"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Для добывающей компании требуется обучить модель для выбора локации бурения скважины.\n",
    "Для этого будут исследованы 3 различных региона добычи, для каждого была обучены наборы моделей.\n",
    "Перед исследованием требуется провести работу над входными данными - разделение на выборки и последующая нормализация.\n",
    "Затем нужно построить модели для предсказания объёма запасов в новых скважинах и на этих предсказаниях отобрать скважины с самыми высокими оценками значений.\n",
    "В конце концов оставим лишь те регионы, в которых вероятность убытков меньше 2.5%. Среди них выбирают регион с наибольшей средней прибылью."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Загрузка данных"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Чтобы подготовить модели оценки объёма запасов нефти в скважине необходимо изучить и переработать данные.\n",
    "Для реализации модели линейной регрессии необходимо нормализовать данные, чтобы большие значения не перекрывали малые."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import pylab as pl\n",
    "import warnings\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from tqdm import tqdm\n",
    "\n",
    "from scipy import stats as st\n",
    "\n",
    "from sklearn.ensemble import RandomForestRegressor\n",
    "from sklearn.exceptions import DataConversionWarning\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "<b>Успех:</b> Отлично, что все импорты собраны в первой ячейке ноутбука! Если у того, кто будет запускать твой ноутбук будут отсутствовать некоторые библиотеки, то он это увидит сразу, а не в процессе!\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [],
   "source": [
    "warnings.filterwarnings(action='ignore', category=DataConversionWarning)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [],
   "source": [
    "try:\n",
    "    df0 = pd.read_csv('/datasets/geo_data_0.csv')\n",
    "    df1 = pd.read_csv('/datasets/geo_data_1.csv')\n",
    "    df2 = pd.read_csv('/datasets/geo_data_2.csv')\n",
    "except Exception as info:\n",
    "    display(info)\n",
    "    df0 = pd.read_csv('https://code.s3.yandex.net/datasets/geo_data_0.csv')\n",
    "    df1 = pd.read_csv('https://code.s3.yandex.net/datasets/geo_data_1.csv')\n",
    "    df2 = pd.read_csv('https://code.s3.yandex.net/datasets/geo_data_2.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "def describe_dataframe(dataframe):\n",
    "    display(dataframe.head(10))\n",
    "    display(dataframe.info())\n",
    "    display(dataframe.describe(percentiles=[.5]).T)\n",
    "    print(f\"Количество дублированных строк: {dataframe.duplicated().sum()}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Первый датафрейм."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "      <th>product</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>txEyH</td>\n",
       "      <td>0.705745</td>\n",
       "      <td>-0.497823</td>\n",
       "      <td>1.221170</td>\n",
       "      <td>105.280062</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2acmU</td>\n",
       "      <td>1.334711</td>\n",
       "      <td>-0.340164</td>\n",
       "      <td>4.365080</td>\n",
       "      <td>73.037750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>409Wp</td>\n",
       "      <td>1.022732</td>\n",
       "      <td>0.151990</td>\n",
       "      <td>1.419926</td>\n",
       "      <td>85.265647</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>iJLyR</td>\n",
       "      <td>-0.032172</td>\n",
       "      <td>0.139033</td>\n",
       "      <td>2.978566</td>\n",
       "      <td>168.620776</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Xdl7t</td>\n",
       "      <td>1.988431</td>\n",
       "      <td>0.155413</td>\n",
       "      <td>4.751769</td>\n",
       "      <td>154.036647</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>wX4Hy</td>\n",
       "      <td>0.969570</td>\n",
       "      <td>0.489775</td>\n",
       "      <td>-0.735383</td>\n",
       "      <td>64.741541</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>tL6pL</td>\n",
       "      <td>0.645075</td>\n",
       "      <td>0.530656</td>\n",
       "      <td>1.780266</td>\n",
       "      <td>49.055285</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>BYPU6</td>\n",
       "      <td>-0.400648</td>\n",
       "      <td>0.808337</td>\n",
       "      <td>-5.624670</td>\n",
       "      <td>72.943292</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>j9Oui</td>\n",
       "      <td>0.643105</td>\n",
       "      <td>-0.551583</td>\n",
       "      <td>2.372141</td>\n",
       "      <td>113.356160</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>OLuZU</td>\n",
       "      <td>2.173381</td>\n",
       "      <td>0.563698</td>\n",
       "      <td>9.441852</td>\n",
       "      <td>127.910945</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      id        f0        f1        f2     product\n",
       "0  txEyH  0.705745 -0.497823  1.221170  105.280062\n",
       "1  2acmU  1.334711 -0.340164  4.365080   73.037750\n",
       "2  409Wp  1.022732  0.151990  1.419926   85.265647\n",
       "3  iJLyR -0.032172  0.139033  2.978566  168.620776\n",
       "4  Xdl7t  1.988431  0.155413  4.751769  154.036647\n",
       "5  wX4Hy  0.969570  0.489775 -0.735383   64.741541\n",
       "6  tL6pL  0.645075  0.530656  1.780266   49.055285\n",
       "7  BYPU6 -0.400648  0.808337 -5.624670   72.943292\n",
       "8  j9Oui  0.643105 -0.551583  2.372141  113.356160\n",
       "9  OLuZU  2.173381  0.563698  9.441852  127.910945"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 100000 entries, 0 to 99999\n",
      "Data columns (total 5 columns):\n",
      " #   Column   Non-Null Count   Dtype  \n",
      "---  ------   --------------   -----  \n",
      " 0   id       100000 non-null  object \n",
      " 1   f0       100000 non-null  float64\n",
      " 2   f1       100000 non-null  float64\n",
      " 3   f2       100000 non-null  float64\n",
      " 4   product  100000 non-null  float64\n",
      "dtypes: float64(4), object(1)\n",
      "memory usage: 3.8+ MB\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>50%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>f0</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>0.500419</td>\n",
       "      <td>0.871832</td>\n",
       "      <td>-1.408605</td>\n",
       "      <td>0.502360</td>\n",
       "      <td>2.362331</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f1</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>0.250143</td>\n",
       "      <td>0.504433</td>\n",
       "      <td>-0.848218</td>\n",
       "      <td>0.250252</td>\n",
       "      <td>1.343769</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f2</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>2.502647</td>\n",
       "      <td>3.248248</td>\n",
       "      <td>-12.088328</td>\n",
       "      <td>2.515969</td>\n",
       "      <td>16.003790</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>product</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>92.500000</td>\n",
       "      <td>44.288691</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>91.849972</td>\n",
       "      <td>185.364347</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            count       mean        std        min        50%         max\n",
       "f0       100000.0   0.500419   0.871832  -1.408605   0.502360    2.362331\n",
       "f1       100000.0   0.250143   0.504433  -0.848218   0.250252    1.343769\n",
       "f2       100000.0   2.502647   3.248248 -12.088328   2.515969   16.003790\n",
       "product  100000.0  92.500000  44.288691   0.000000  91.849972  185.364347"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Количество дублированных строк: 0\n"
     ]
    }
   ],
   "source": [
    "describe_dataframe(df0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Для дальнейшей работы необходимо будет перенести категориальное значение id в index датафрейма, т.к. это и есть индекс скважины, отдельное числовое представление индекса излишне."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [],
   "source": [
    "features_0 = df0[[\"f0\", \"f1\", \"f2\"]]\n",
    "features_0.index = df0['id']\n",
    "target_0 = df0['product']\n",
    "target_0.index = df0['id']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Разделим данные на валидационную и тестовую выборки."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Количество скважин')"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "features_train_0, features_valid_0, target_train_0, target_valid_0 = train_test_split(\n",
    "    features_0, target_0, test_size=.25, random_state=32123)\n",
    "fig = plt.figure(figsize = (12, 6))\n",
    "ax = fig.gca()\n",
    "hist0 = target_train_0.hist(\n",
    "    bins=18,\n",
    "    legend=True,\n",
    ")\n",
    "pl.suptitle(\"Распределение запасов нефти первого региона\")\n",
    "hist0.set_xlabel(\"Объём нефти\")\n",
    "hist0.set_ylabel(\"Количество скважин\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Изменения:</b> Изменён масштаб графика, добавлены подписи осей и название.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "<b>Успех (ревью 2):</b> Спасибо!\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Объёмы нефти в скважинах первого региона распределены нормально."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Среднее значение запаса нефти в скважине:  92.5 тыс. баррелей'"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f\"Среднее значение запаса нефти в скважине: {target_train_0.mean(): .3} тыс. баррелей\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Нормализуем данные для более точного подбора параметров моделей."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>y02ny</th>\n",
       "      <td>-1.146059</td>\n",
       "      <td>1.251477</td>\n",
       "      <td>-0.212471</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>y1cQO</th>\n",
       "      <td>0.319854</td>\n",
       "      <td>0.572784</td>\n",
       "      <td>-0.872745</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>xu1gI</th>\n",
       "      <td>0.937027</td>\n",
       "      <td>-1.207503</td>\n",
       "      <td>-0.878044</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33mI5</th>\n",
       "      <td>-0.564041</td>\n",
       "      <td>-0.027369</td>\n",
       "      <td>0.106684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>u8EYd</th>\n",
       "      <td>-0.602662</td>\n",
       "      <td>1.576371</td>\n",
       "      <td>0.247156</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1Uatn</th>\n",
       "      <td>1.191606</td>\n",
       "      <td>-1.117558</td>\n",
       "      <td>0.996478</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>fD1V9</th>\n",
       "      <td>0.519331</td>\n",
       "      <td>0.221111</td>\n",
       "      <td>-0.264934</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>pEj03</th>\n",
       "      <td>-0.575704</td>\n",
       "      <td>-0.500024</td>\n",
       "      <td>-0.298915</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2ocEN</th>\n",
       "      <td>1.015977</td>\n",
       "      <td>-0.953444</td>\n",
       "      <td>-0.577819</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EdPD0</th>\n",
       "      <td>-0.579474</td>\n",
       "      <td>0.628254</td>\n",
       "      <td>-1.207404</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             f0        f1        f2\n",
       "id                                 \n",
       "y02ny -1.146059  1.251477 -0.212471\n",
       "y1cQO  0.319854  0.572784 -0.872745\n",
       "xu1gI  0.937027 -1.207503 -0.878044\n",
       "33mI5 -0.564041 -0.027369  0.106684\n",
       "u8EYd -0.602662  1.576371  0.247156\n",
       "1Uatn  1.191606 -1.117558  0.996478\n",
       "fD1V9  0.519331  0.221111 -0.264934\n",
       "pEj03 -0.575704 -0.500024 -0.298915\n",
       "2ocEN  1.015977 -0.953444 -0.577819\n",
       "EdPD0 -0.579474  0.628254 -1.207404"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 75000 entries, y02ny to rmNUx\n",
      "Data columns (total 3 columns):\n",
      " #   Column  Non-Null Count  Dtype  \n",
      "---  ------  --------------  -----  \n",
      " 0   f0      75000 non-null  float64\n",
      " 1   f1      75000 non-null  float64\n",
      " 2   f2      75000 non-null  float64\n",
      "dtypes: float64(3)\n",
      "memory usage: 2.3+ MB\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>50%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>f0</th>\n",
       "      <td>75000.0</td>\n",
       "      <td>-1.293188e-17</td>\n",
       "      <td>1.000007</td>\n",
       "      <td>-2.189475</td>\n",
       "      <td>0.001634</td>\n",
       "      <td>2.139736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f1</th>\n",
       "      <td>75000.0</td>\n",
       "      <td>-1.200107e-16</td>\n",
       "      <td>1.000007</td>\n",
       "      <td>-2.170048</td>\n",
       "      <td>-0.000597</td>\n",
       "      <td>2.147799</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f2</th>\n",
       "      <td>75000.0</td>\n",
       "      <td>-9.350742e-17</td>\n",
       "      <td>1.000007</td>\n",
       "      <td>-4.501229</td>\n",
       "      <td>0.003254</td>\n",
       "      <td>3.985619</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      count          mean       std       min       50%       max\n",
       "f0  75000.0 -1.293188e-17  1.000007 -2.189475  0.001634  2.139736\n",
       "f1  75000.0 -1.200107e-16  1.000007 -2.170048 -0.000597  2.147799\n",
       "f2  75000.0 -9.350742e-17  1.000007 -4.501229  0.003254  3.985619"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Количество дублированных строк: 0\n"
     ]
    }
   ],
   "source": [
    "scaler = StandardScaler()\n",
    "scaler.fit(features_train_0)\n",
    "features_train_0 = pd.DataFrame(\n",
    "    scaler.transform(features_train_0),\n",
    "    columns=features_train_0.columns,\n",
    "    index=features_train_0.index)\n",
    "features_valid_0 = pd.DataFrame(\n",
    "    scaler.transform(features_valid_0),\n",
    "    columns=features_valid_0.columns,\n",
    "    index=features_valid_0.index)\n",
    "\n",
    "describe_dataframe(features_train_0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Повторим процедуру для двух других датафреймов."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Второй датафрейм"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "      <th>product</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>kBEdx</td>\n",
       "      <td>-15.001348</td>\n",
       "      <td>-8.276000</td>\n",
       "      <td>-0.005876</td>\n",
       "      <td>3.179103</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>62mP7</td>\n",
       "      <td>14.272088</td>\n",
       "      <td>-3.475083</td>\n",
       "      <td>0.999183</td>\n",
       "      <td>26.953261</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>vyE1P</td>\n",
       "      <td>6.263187</td>\n",
       "      <td>-5.948386</td>\n",
       "      <td>5.001160</td>\n",
       "      <td>134.766305</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>KcrkZ</td>\n",
       "      <td>-13.081196</td>\n",
       "      <td>-11.506057</td>\n",
       "      <td>4.999415</td>\n",
       "      <td>137.945408</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>AHL4O</td>\n",
       "      <td>12.702195</td>\n",
       "      <td>-8.147433</td>\n",
       "      <td>5.004363</td>\n",
       "      <td>134.766305</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>HHckp</td>\n",
       "      <td>-3.327590</td>\n",
       "      <td>-2.205276</td>\n",
       "      <td>3.003647</td>\n",
       "      <td>84.038886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>h5Ujo</td>\n",
       "      <td>-11.142655</td>\n",
       "      <td>-10.133399</td>\n",
       "      <td>4.002382</td>\n",
       "      <td>110.992147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>muH9x</td>\n",
       "      <td>4.234715</td>\n",
       "      <td>-0.001354</td>\n",
       "      <td>2.004588</td>\n",
       "      <td>53.906522</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>YiRkx</td>\n",
       "      <td>13.355129</td>\n",
       "      <td>-0.332068</td>\n",
       "      <td>4.998647</td>\n",
       "      <td>134.766305</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>jG6Gi</td>\n",
       "      <td>1.069227</td>\n",
       "      <td>-11.025667</td>\n",
       "      <td>4.997844</td>\n",
       "      <td>137.945408</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      id         f0         f1        f2     product\n",
       "0  kBEdx -15.001348  -8.276000 -0.005876    3.179103\n",
       "1  62mP7  14.272088  -3.475083  0.999183   26.953261\n",
       "2  vyE1P   6.263187  -5.948386  5.001160  134.766305\n",
       "3  KcrkZ -13.081196 -11.506057  4.999415  137.945408\n",
       "4  AHL4O  12.702195  -8.147433  5.004363  134.766305\n",
       "5  HHckp  -3.327590  -2.205276  3.003647   84.038886\n",
       "6  h5Ujo -11.142655 -10.133399  4.002382  110.992147\n",
       "7  muH9x   4.234715  -0.001354  2.004588   53.906522\n",
       "8  YiRkx  13.355129  -0.332068  4.998647  134.766305\n",
       "9  jG6Gi   1.069227 -11.025667  4.997844  137.945408"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 100000 entries, 0 to 99999\n",
      "Data columns (total 5 columns):\n",
      " #   Column   Non-Null Count   Dtype  \n",
      "---  ------   --------------   -----  \n",
      " 0   id       100000 non-null  object \n",
      " 1   f0       100000 non-null  float64\n",
      " 2   f1       100000 non-null  float64\n",
      " 3   f2       100000 non-null  float64\n",
      " 4   product  100000 non-null  float64\n",
      "dtypes: float64(4), object(1)\n",
      "memory usage: 3.8+ MB\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>50%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>f0</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>1.141296</td>\n",
       "      <td>8.965932</td>\n",
       "      <td>-31.609576</td>\n",
       "      <td>1.153055</td>\n",
       "      <td>29.421755</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f1</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>-4.796579</td>\n",
       "      <td>5.119872</td>\n",
       "      <td>-26.358598</td>\n",
       "      <td>-4.813172</td>\n",
       "      <td>18.734063</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f2</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>2.494541</td>\n",
       "      <td>1.703572</td>\n",
       "      <td>-0.018144</td>\n",
       "      <td>2.011479</td>\n",
       "      <td>5.019721</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>product</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>68.825000</td>\n",
       "      <td>45.944423</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>57.085625</td>\n",
       "      <td>137.945408</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            count       mean        std        min        50%         max\n",
       "f0       100000.0   1.141296   8.965932 -31.609576   1.153055   29.421755\n",
       "f1       100000.0  -4.796579   5.119872 -26.358598  -4.813172   18.734063\n",
       "f2       100000.0   2.494541   1.703572  -0.018144   2.011479    5.019721\n",
       "product  100000.0  68.825000  45.944423   0.000000  57.085625  137.945408"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Количество дублированных строк: 0\n"
     ]
    }
   ],
   "source": [
    "describe_dataframe(df1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "features_1 = df1[[\"f0\", \"f1\", \"f2\"]]\n",
    "features_1.index = df1['id']\n",
    "target_1 = df1['product']\n",
    "target_1.index = df1['id']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Количество скважин')"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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0/1IUt88Ay5Jeozrr7+epz/96cybN49nPOMZHHroodx3333Mnj2b4447jr322ovPf/7znHvuuey+++7stttuHHfccY+u/6lPfYqnPe1p7L333vzHf/zHo+1HHXUU559//qPTm2+++aOPTz75ZHbffXf22GMPjj/+eM4//3wuu+wy5s2bx5577sn999/fz5OXpB54BlyS9FuuvfZaTj/9dPbff39e85rXcOqppwKw7bbbcvnll3PTTTex7777smjRIrbeemte+MIX8sUvfpF99tmHd73rXSxatIitttqKAw44gGc961kr3deFF17IBRdcwKWXXsqmm27K0qVL2WabbfjoRz/KBz7wAebMmdPHU5ak3ngGXJL0W2bNmsX+++8PwKte9Sq+853vAPDKV74SgO9///vMnTuX7bffnmnTpjFv3jy+/e1vc+mllz7avtFGGz26/Mp84xvf4Oijj2bTTTcFYJtttunoWUnS5GAAlyT9lpF3GVkxvdlmm63xNqdNm8YjjzwCwCOPPMKDDz645gVK0jrMISg9ufrGuzhqnC+mmuzG62IvSf37xS9+wXe/+132228/PvvZz/Kc5zyHK6644tH5e++9N295y1u47bbb2HrrrTn33HN585vfzN57782xxx7L7bffzpZbbsnnP/959thjDwBmz57NokWLOOyww1iwYAEPPfQQAH/wB3/Ae97zHubNm/eYIShbbLEF99xzz4Q8f0nqkgFckvRbdtllFz72sY/xmte8hl133ZU/+7M/45RTTnl0/g477MBJJ53EAQccQFVx8MEHc8ghhwDw7ne/m/3224/p06ez5557PrrO61//eg455BD22GMPDjzwwEfPph944IFceeWVzJkzh4022ogXv/jFvP/97+eoo47iDW94A5tssgnf/e532WSTTXrtA2kqGu87K60LJuMJQQO4JE1iE/WHY9q0aZx99tmPreX66x8zfcQRR3DEEUf81rpHH300Rx999G+1z5gxg0suueTR6ZNPPvnRx8cffzzHH3/8Y5Z/xStewSte8Yo1KV+SJjXHgEuSJEk9MoBLkh5j9uzZ/PCHP5zoMiRpyjKAS5IkST0ygEvSJFNVE13CpGcfSVqXdRbAk5yR5NYkPxxo+/sk/5XkqiT/mmT6wLwTkixOcm2SFw20H9i2LU5y/ED7Tkkubds/l2Sjrp6LJPVl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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "features_train_1, features_valid_1, target_train_1, target_valid_1 = train_test_split(\n",
    "    features_1, target_1, test_size=.25, random_state=32123)\n",
    "fig = plt.figure(figsize = (12, 6))\n",
    "ax = fig.gca()\n",
    "hist1 = target_train_1.hist(\n",
    "    legend=True\n",
    ")\n",
    "pl.suptitle(\"Распределение запасов нефти второго региона\")\n",
    "hist1.set_xlabel(\"Объём нефти\")\n",
    "hist1.set_ylabel(\"Количество скважин\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Изменения:</b> Изменён масштаб графика, добавлены подписи осей и название.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Объёмы нефти в скважинах второго региона не имеют внятного распределения."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Среднее значение запаса нефти в скважине:  68.7 тыс. баррелей'"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f\"Среднее значение запаса нефти в скважине: {target_train_1.mean(): .3} тыс. баррелей\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>tDtY5</th>\n",
       "      <td>0.733016</td>\n",
       "      <td>-0.390459</td>\n",
       "      <td>-0.878137</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Vhtai</th>\n",
       "      <td>-1.284234</td>\n",
       "      <td>-0.644242</td>\n",
       "      <td>1.469057</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>vBoCO</th>\n",
       "      <td>-0.510115</td>\n",
       "      <td>1.089749</td>\n",
       "      <td>-0.291124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SfMWv</th>\n",
       "      <td>-0.698701</td>\n",
       "      <td>-1.017410</td>\n",
       "      <td>0.890288</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15Cyr</th>\n",
       "      <td>0.372528</td>\n",
       "      <td>0.686589</td>\n",
       "      <td>-0.874524</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>vXIIz</th>\n",
       "      <td>-0.587659</td>\n",
       "      <td>1.621120</td>\n",
       "      <td>-0.875472</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>PlmwS</th>\n",
       "      <td>-0.876600</td>\n",
       "      <td>-1.509598</td>\n",
       "      <td>-0.289920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mBtS8</th>\n",
       "      <td>0.440508</td>\n",
       "      <td>-0.027724</td>\n",
       "      <td>0.299857</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6OtSo</th>\n",
       "      <td>-1.353175</td>\n",
       "      <td>-0.451031</td>\n",
       "      <td>0.298020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>zyA8c</th>\n",
       "      <td>0.381049</td>\n",
       "      <td>1.338254</td>\n",
       "      <td>0.292503</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             f0        f1        f2\n",
       "id                                 \n",
       "tDtY5  0.733016 -0.390459 -0.878137\n",
       "Vhtai -1.284234 -0.644242  1.469057\n",
       "vBoCO -0.510115  1.089749 -0.291124\n",
       "SfMWv -0.698701 -1.017410  0.890288\n",
       "15Cyr  0.372528  0.686589 -0.874524\n",
       "vXIIz -0.587659  1.621120 -0.875472\n",
       "PlmwS -0.876600 -1.509598 -0.289920\n",
       "mBtS8  0.440508 -0.027724  0.299857\n",
       "6OtSo -1.353175 -0.451031  0.298020\n",
       "zyA8c  0.381049  1.338254  0.292503"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 75000 entries, tDtY5 to 6EWAz\n",
      "Data columns (total 3 columns):\n",
      " #   Column  Non-Null Count  Dtype  \n",
      "---  ------  --------------  -----  \n",
      " 0   f0      75000 non-null  float64\n",
      " 1   f1      75000 non-null  float64\n",
      " 2   f2      75000 non-null  float64\n",
      "dtypes: float64(3)\n",
      "memory usage: 2.3+ MB\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>50%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>f0</th>\n",
       "      <td>75000.0</td>\n",
       "      <td>2.349528e-17</td>\n",
       "      <td>1.000007</td>\n",
       "      <td>-3.653487</td>\n",
       "      <td>0.001707</td>\n",
       "      <td>3.155470</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f1</th>\n",
       "      <td>75000.0</td>\n",
       "      <td>-5.565918e-17</td>\n",
       "      <td>1.000007</td>\n",
       "      <td>-4.210532</td>\n",
       "      <td>-0.004845</td>\n",
       "      <td>4.595829</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f2</th>\n",
       "      <td>75000.0</td>\n",
       "      <td>-6.892265e-17</td>\n",
       "      <td>1.000007</td>\n",
       "      <td>-1.474743</td>\n",
       "      <td>-0.282490</td>\n",
       "      <td>1.486010</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      count          mean       std       min       50%       max\n",
       "f0  75000.0  2.349528e-17  1.000007 -3.653487  0.001707  3.155470\n",
       "f1  75000.0 -5.565918e-17  1.000007 -4.210532 -0.004845  4.595829\n",
       "f2  75000.0 -6.892265e-17  1.000007 -1.474743 -0.282490  1.486010"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Количество дублированных строк: 0\n"
     ]
    }
   ],
   "source": [
    "scaler = StandardScaler()\n",
    "scaler.fit(features_train_1)\n",
    "features_train_1 = pd.DataFrame(\n",
    "    scaler.transform(features_train_1),\n",
    "    columns=features_train_1.columns,\n",
    "    index=features_train_1.index)\n",
    "features_valid_1 = pd.DataFrame(\n",
    "    scaler.transform(features_valid_1),\n",
    "    columns=features_valid_1.columns,\n",
    "    index=features_valid_1.index)\n",
    "\n",
    "describe_dataframe(features_train_1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Третий датафрейм"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "      <th>product</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>fwXo0</td>\n",
       "      <td>-1.146987</td>\n",
       "      <td>0.963328</td>\n",
       "      <td>-0.828965</td>\n",
       "      <td>27.758673</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>WJtFt</td>\n",
       "      <td>0.262778</td>\n",
       "      <td>0.269839</td>\n",
       "      <td>-2.530187</td>\n",
       "      <td>56.069697</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ovLUW</td>\n",
       "      <td>0.194587</td>\n",
       "      <td>0.289035</td>\n",
       "      <td>-5.586433</td>\n",
       "      <td>62.871910</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>q6cA6</td>\n",
       "      <td>2.236060</td>\n",
       "      <td>-0.553760</td>\n",
       "      <td>0.930038</td>\n",
       "      <td>114.572842</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>WPMUX</td>\n",
       "      <td>-0.515993</td>\n",
       "      <td>1.716266</td>\n",
       "      <td>5.899011</td>\n",
       "      <td>149.600746</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>LzZXx</td>\n",
       "      <td>-0.758092</td>\n",
       "      <td>0.710691</td>\n",
       "      <td>2.585887</td>\n",
       "      <td>90.222465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>WBHRv</td>\n",
       "      <td>-0.574891</td>\n",
       "      <td>0.317727</td>\n",
       "      <td>1.773745</td>\n",
       "      <td>45.641478</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>XO8fn</td>\n",
       "      <td>-1.906649</td>\n",
       "      <td>-2.458350</td>\n",
       "      <td>-0.177097</td>\n",
       "      <td>72.480640</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>ybmQ5</td>\n",
       "      <td>1.776292</td>\n",
       "      <td>-0.279356</td>\n",
       "      <td>3.004156</td>\n",
       "      <td>106.616832</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>OilcN</td>\n",
       "      <td>-1.214452</td>\n",
       "      <td>-0.439314</td>\n",
       "      <td>5.922514</td>\n",
       "      <td>52.954532</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      id        f0        f1        f2     product\n",
       "0  fwXo0 -1.146987  0.963328 -0.828965   27.758673\n",
       "1  WJtFt  0.262778  0.269839 -2.530187   56.069697\n",
       "2  ovLUW  0.194587  0.289035 -5.586433   62.871910\n",
       "3  q6cA6  2.236060 -0.553760  0.930038  114.572842\n",
       "4  WPMUX -0.515993  1.716266  5.899011  149.600746\n",
       "5  LzZXx -0.758092  0.710691  2.585887   90.222465\n",
       "6  WBHRv -0.574891  0.317727  1.773745   45.641478\n",
       "7  XO8fn -1.906649 -2.458350 -0.177097   72.480640\n",
       "8  ybmQ5  1.776292 -0.279356  3.004156  106.616832\n",
       "9  OilcN -1.214452 -0.439314  5.922514   52.954532"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 100000 entries, 0 to 99999\n",
      "Data columns (total 5 columns):\n",
      " #   Column   Non-Null Count   Dtype  \n",
      "---  ------   --------------   -----  \n",
      " 0   id       100000 non-null  object \n",
      " 1   f0       100000 non-null  float64\n",
      " 2   f1       100000 non-null  float64\n",
      " 3   f2       100000 non-null  float64\n",
      " 4   product  100000 non-null  float64\n",
      "dtypes: float64(4), object(1)\n",
      "memory usage: 3.8+ MB\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>50%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>f0</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>0.002023</td>\n",
       "      <td>1.732045</td>\n",
       "      <td>-8.760004</td>\n",
       "      <td>0.009424</td>\n",
       "      <td>7.238262</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f1</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>-0.002081</td>\n",
       "      <td>1.730417</td>\n",
       "      <td>-7.084020</td>\n",
       "      <td>-0.009482</td>\n",
       "      <td>7.844801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f2</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>2.495128</td>\n",
       "      <td>3.473445</td>\n",
       "      <td>-11.970335</td>\n",
       "      <td>2.484236</td>\n",
       "      <td>16.739402</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>product</th>\n",
       "      <td>100000.0</td>\n",
       "      <td>95.000000</td>\n",
       "      <td>44.749921</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>94.925613</td>\n",
       "      <td>190.029838</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            count       mean        std        min        50%         max\n",
       "f0       100000.0   0.002023   1.732045  -8.760004   0.009424    7.238262\n",
       "f1       100000.0  -0.002081   1.730417  -7.084020  -0.009482    7.844801\n",
       "f2       100000.0   2.495128   3.473445 -11.970335   2.484236   16.739402\n",
       "product  100000.0  95.000000  44.749921   0.000000  94.925613  190.029838"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Количество дублированных строк: 0\n"
     ]
    }
   ],
   "source": [
    "describe_dataframe(df2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [],
   "source": [
    "features_2 = df2[[\"f0\", \"f1\", \"f2\"]]\n",
    "features_2.index = df2['id']\n",
    "target_2 = df2['product']\n",
    "target_2.index = df2['id']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Количество скважин')"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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0UaMGDGCcePGERHtDmfAyUwef/xx5s2bxzbbbNP0fg4dkSRJWsutu+66bLrppibZvYgINt100z73+JtoS5IkySR7FVanfUy0JUmSNKhcdNFFnHDCCau97x/+8Id+icMx2pIkSVrBuGlX9evx5p55UL8cZ/ny5ay77rr9cqzeXHTRRey4445sueWWLR/LHm1JkiS13dy5c3njG9/I5MmTedOb3sThhx/OM888w7hx4zj11FPZdddd+e53v8ull17K+PHj2XHHHTn11FNf2v/CCy/kDW94A7vtths///nPXyqfMmUKl19++UvLw4cPf+nxWWedxfjx49lpp52YNm0al19+ObfeeiuTJ09m55135tlnn23pOdWaaEfEqIi4PCJ+GxH3RMRbI2J0RFwbEfeV35uUbSMivhIR90fEnRGxa8Nxjinb3xcRx9QZsyRJktrj3nvv5e///u+55557GDlyJOeeey4Am266Kbfddht77bUXp556Kj/5yU+44447uOWWW/jBD37AggULOO200/j5z3/OjTfeyN13373Kun74wx9yxRVXcPPNN/PrX/+aj33sYxx++OFMmDCBSy65hDvuuINhw4a19Hzq7tH+MvCjzHwjsBNwDzANuD4ztwWuL8sABwDblp/jgK8BRMRo4DRgd2A34LSu5FySJEmDx9Zbb82ee+4JwPvf/35uvPFGAI444ggAbrnlFiZOnMjmm2/OkCFDmDx5Mj/72c+4+eabXypff/31X9p+Za677jqmTp3KhhtuCMDo0aP7/fnUlmhHxMbAXsD5AJn5fGY+AUwCppfNpgOHlseTgG9m5SZgVERsAewHXJuZizJzMXAtsH9dcUuSJKk9us/s0bW80UYbrfYxhwwZwosvvgjAiy++yPPPP7/6Afa17hqPvQ3wJ+DCiNgJmA18BBiTmQvKNn8ExpTHWwGPNOw/r5T1Vr6CiDiOqiecMWPGMGvWrH57In2xdOnSttU9GNh+rbH9WmP7tWbhoic555Ir2lb/+K02blvd/cHzrzW2X2tGjhzJkiVLajt+M8deunQpv//977nuuuvYfffdmT59Om95y1u47bbbWLp0KRtssAHbb789J554InPnzmXUqFFcfPHFfOhDH2KHHXbgpJNOYu7cuYwcOZIZM2aw4447smTJErbYYgt++ctfcsABB3DllVfywgsvsGTJEvbcc0/OOussDjnkEDbccEMWLVrE6NGjGTZsGI8++miPMT/33HN9Os/qTLSHALsCJ2bmzRHxZV4eJgJAZmZEZH9UlpnnAecBTJgwISdOnNgfh+2zWbNm0a66BwPbrzW2X2tsv9acc8kVnD2nfZNZzZ08sW119wfPv9bYfq25/fbbGTFiRG3Hb+bYw4cPZ7vttuOiiy7ixBNPZPvtt+fkk0/mvPPOY/jw4YwYMYIRI0Zw1llncfDBB5OZHHTQQRx55JEAfPrTn2bfffdl1KhR7Lzzzqy//vqMGDGCE044gUmTJvG2t72N/fff/6W7YB522GH87ne/Y++992b99dfnwAMP5HOf+xzHHnssH/3oRxk2bBi//OUvVxinPXToUHbZZZemn3edfxHnAfMy8+ayfDlVov1oRGyRmQvK0JCFZf18YOuG/ceWsvnAxG7ls2qMW5Ikaa3WX9Px9dWQIUO4+OKLV4xl7twVlo866iiOOuqoV+w7depUpk6d+oryMWPGcNNNN720fNZZZ730eNq0aUybtkI/MO95z3t4z3veszrhv0JtY7Qz84/AIxGxXSnaB7gbmAl0zRxyDND1PeNM4Ogy+8gewJNliMk1wL4RsUm5CHLfUiZJkiQNWHV/x3cicElErA88CEylSu4vi4gPAg8D7yvbXg0cCNwPPFO2JTMXRcRngFvKdqdn5qKa45YkSdIaNG7cOO666652h9Gvak20M/MOYEIPq/bpYdsEju/lOBcAF/RrcJIkSVKNvDOkJEmSqPo81ZvVaR8TbUmSpLXc8uXLefzxx022e5GZPP744wwdOrRP+7VvHiZJGmTGTbuqrfW3a5YASZ3v6aefZsmSJfzpT39qdygD1tChQxk7dmyf9jHRliRJWstlJttss027wxh0HDoiSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTUw0ZYkSZJqYKItSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQZD2h2AJElq3bhpV7W1/rlnHtTW+qWByB5tSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTUw0ZYkSZJqYKItSZIk1cDp/aRBZM78J5nSxim+nN5LkqSX2aMtSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTVwHm1J/WZcG+fwBufxliQNLPZoS5IkSTWwR1uSpH7Q6jc6p4xf1tY7u0rqf/ZoS5IkSTUw0ZYkSZJqYKItSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTWoNdGOiLkRMSci7oiIW0vZ6Ii4NiLuK783KeUREV+JiPsj4s6I2LXhOMeU7e+LiGPqjFmSJEnqD2viFux7Z+ZjDcvTgOsz88yImFaWTwUOALYtP7sDXwN2j4jRwGnABCCB2RExMzMXr4HYJXUQb4EtSRpI2jF0ZBIwvTyeDhzaUP7NrNwEjIqILYD9gGszc1FJrq8F9l/DMUuSJEl9EplZ38EjHgIWU/VE/1dmnhcRT2TmqLI+gMWZOSoirgTOzMwby7rrqXq6JwJDM/OzpfxfgGcz8wvd6joOOA5gzJgxb54xY0Ztz2tlli5dyvDhw9tS92Bg+7Vm4aInefTZdkfRucYMo6Pbb/xWG7e1fs+/1nj+tcb/H62x/Vbf3nvvPTszJ/S0ru6hI2/LzPkR8Srg2oj4bePKzMyI6JdMPzPPA84DmDBhQk6cOLE/Dttns2bNol11Dwa2X2vOueQKzp6zJkaEDU6njF/W0e03d/LEttbv+dcaz7/W+P+jNbZfPWodOpKZ88vvhcD3gd2AR8uQEMrvhWXz+cDWDbuPLWW9lUuSJEkDVm2JdkRsFBEjuh4D+wJ3ATOBrplDjgGuKI9nAkeX2Uf2AJ7MzAXANcC+EbFJmaFk31ImSZIkDVh1fkc1Bvh+NQybIcC3M/NHEXELcFlEfBB4GHhf2f5q4EDgfuAZYCpAZi6KiM8At5TtTs/MRTXGLUmSJLWstkQ7Mx8Eduqh/HFgnx7KEzi+l2NdAFzQ3zFKkiRJdfHOkJIkSVINTLQlSZKkGphoS5IkSTUw0ZYkSZJqYKItSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTUw0ZYkSZJqYKItSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTUw0ZYkSZJqYKItSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGgxpdwBSfxo37aq21j/3zIPaWr8kSRo4TLQlaZBo9wfNU8a3tXqt5ebMf5IpbXwP2NGinjh0RJIkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTUw0ZYkSZJqYKItSZIk1WCVN6yJiFf3VJ6Zv+//cCRJkqTBoZk7Q3bdZum1wANAAAn8RV1BSZIkSZ1ulYl2Zo4HiIjbM3OX+kOSJEmSOl9fxmhnbVFIkiRJg0wzY7QPKw9HNTwmM/+ntqgkSZKkDtfMGO2Dy+8bGh4nYKItSZIk9aKZMdpT10QgkiRJ0mDSzNCRr/RUnpknNVNBRKwL3ArMz8x3R8Q2wAxgU2A28IHMfD4iNgC+CbwZeBw4IjPnlmN8HPggsBw4KTOvaaZuSZIkqV2auRjy3cBewF1UiXHXT7M+AtzTsHwW8MXMfD2wmCqBpvxeXMq/WLYjIrYHjgR2APYHzi3JuyRJkjRgNZNovwH4b+DvgPWAb2Xm9GYOHhFjgYOAb5TlAN4JXF42mQ4cWh5PKsuU9fuU7ScBMzLzz5n5EHA/sFsz9UuSJEntEpnNzdoXERtS9U5PAr6QmZevYhci4nLg88AI4B+BKcBNpdeaiNga+GFm7hgRdwH7Z+a8su4BYHfgU2Wfi0v5+WWfy7vVdRxwHMCYMWPePGPGjKaeV39bunQpw4cPb0vdg0Gr7Tdn/pP9GE3fjd9q47bWv3DRkzz6bFtD6GhjhmH7tcD2a02nt9/a/vev3c+/VeYvq2/vvfeenZkTelrXzBjtObw8h3YAGwPfAVY6fCMi3g0szMzZETGxLwGvjsw8DzgPYMKECTlxYu1V9mjWrFm0q+7BoNX2mzLtqlVvVKO5kye2tf5zLrmCs+c0M5mQenLK+GW2Xwtsv9Z0evut7X//2v38W2X+Uo9mzsh3r+ax9wQOiYgDgaHASODLVPNxD8nMZcBYYH7Zfj6wNTAvIoZQJfSPN5R3adxHkiRJGpCaGaO9NDMfbvwB3raqnTLz45k5NjPHUV3M+JPMnAz8FDi8bHYMcEV5PLMsU9b/JKtxLTOBIyNigzJjybbAr5p8fpIkSVJbNJNo/ygitgOIiDdGxPXA21uo81TgoxFxP9UUf+eX8vOBTUv5R4FpAJn5G+Ay4G7gR8Dxmbm8hfolSZKk2jUzdGQycElE3Ab8BfCRzOxTj3JmzgJmlccP0sOsIZn5HPDeXvY/AzijL3VKkiRJ7bTKHu3M/B2wH7Ad1dR+DtuQJEmSVqGZWUeWUM06si7w9og4C8jMHFl3cJIkSVKnaqZHewSwFXADMC0zR5hkS5IkSSu3ykS73FTmx8ATwIHlluiSJEmSVqKZiyGvAP6u3HhmAvDfEfGLzPynmmOTJEmSOlYz0/sdkpmzATLzVqo5tB+sNSpJkiSpw62yRzsz5wFExKuo7vAI0N77XEuSJEkDXDNjtA+JiPuAh6guiJwL/LDmuCRJkqSO1szQkc8AewC/y8xtgH2Am2qNSpIkSepwzVwM+UJmPh4R60TEOpn504j4Ut2BSZ1o3LT2jqo6ZXxbq5ckSQ2aSbSfiIjhwM+obsW+EHi63rAkSVInsaNBeqVmho5MAp4F/gH4EfAAcHCdQUmSJEmdrplZR17qvY6I64BNMvPxWqOSJEmSOlwzs478e0QsjIhPUt0h8pKI+GL9oUmSJEmdq5kx2n8N7AjcC2wBvADcWWdQkiRJUqdrZoz2U5m5EJibmc9l5nLgzzXHJUmSJHW0Znq03xgRdwKvL78DeG29YUmSJEmdrZlE+021RyFJkiQNMs0MHVmWmQ83/gAH1B2YJEmS1MmaSbSviog3AkTEdhFxA7BzrVFJkiRJHa6ZoSNHAZdGxCxgb+CkzPxZrVFJkiRJHW6VPdqZeQ9wEPBO4PMm2ZIkSdKqNXPDmjlUt14fCVwcEXeW2UckSZIk9aKZoSPvrj0KSZIkaZBp5mLILYBFDTOOLAb+T71hSZIkSZ2tmUT7a8DShuWlpUySJElSL5pJtCMzs2shM1+kuSEnkiRJ0lqrmUT7wYg4KSLWKz8fAR6sOzBJkiSpkzWTaH8Y+EtgPjAP2B04rs6gJEmSpE63yiEgmbkQOHINxCJJkiQNGs30aEuSJEnqIxNtSZIkqQYm2pIkSVINmrkF+8YR8cWIuLX8nB0RG6+J4CRJkqRO1UyP9gXAU8D7ys9TwIV1BiVJkiR1umZuPPO6zHxPw/KnI+KOmuKRJEmSBoVmerSfjYi3dS1ExJ7As/WFJEmSJHW+Znq0/y8wvYzLDmARMKXOoCRJkqRO18wNa+4AdoqIkWX5qbqDkiRJkjpdM7OObB8RJwDDgH+PiMsjYpf6Q5MkSZI6VzNjtL8NbAfcDPwKuAz4Rp1BSZIkSZ2umUR7ncw8EXg+M8/PzMua3E+SJElaazWTMA+PiMOAIRHx1xHxHmDkqnaKiKER8auI+HVE/CYiPl3Kt4mImyPi/oj4TkSsX8o3KMv3l/XjGo718VJ+b0Tst3pPVZIkSVpzmkm0bwAOLr8PAd4N/KyJ/f4MvDMzdwJ2BvaPiD2As4AvZubrgcXAB8v2HwQWl/Ivlu2IiO2BI4EdgP2BcyNi3aaenSRJktQmzUzvd05m3tbXA2dmAkvL4nrlJ4F3An9TyqcDnwK+BkwqjwEuB74aEVHKZ2Tmn4GHIuJ+YDfgl32NSZIkSVpTmunRXu0LHyNi3XIXyYXAtcADwBOZuaxsMg/YqjzeCngEoKx/Eti0sbyHfSRJkqQBqZke7SERsQnVzWpekpmLVrVjZi4Hdo6IUcD3gTeuTpDNiIjjgOMAxowZw6xZs+qqaqWWLl3atroHg1bb75Txy1a90SA2Zpht0ArbrzW2X2tsv9a0u/06/X+/+Us9mkm0twNms2KincBrm60kM5+IiJ8CbwVGRcSQ0ms9FphfNpsPbA3Mi4ghwMbA4w3lXRr3aazjPOA8gAkTJuTEiRObDa9fzZo1i3bVPRi02n5Tpl3Vf8F0oFPGL+PsOc28rdUT2681tl9rbL/WtLv95k6e2La6+4P5Sz2aGTpyd2a+NjO3afhZZZIdEZuXnmwiYhjwV8A9wE+Bw8tmxwBXlMczyzJl/U/KOO+ZwJFlVpJtgG2p5vOWJEmSBqw6P/ptAUwvM4SsA1yWmVdGxN3AjIj4LHA7cH7Z/nzgW+Vix0VUM42Qmb+JiMuAu4FlwPFlSIokSZI0YDWTaL91dQ6cmXcCr7hVe2Y+SDVrSPfy54D39nKsM4AzVicOSZIkqR2aGTryv11DQAAiYpOIuKa+kCRJkqTO10yivXlmPtG1kJmLgVfVFpEkSZI0CDSTaC+PiFd3LUTEa6hmHZEkSZLUi2bGaH8SuDEibqCa4u/tlPmqJUmSJPVslYl2Zv4oInYF9ihFJ2fmY/WGJUmSJHW2VQ4diYgA9gd2zcwrgQ0j4hWzhkiSJEl6WTNjtM+lmuLvqLK8BPjP2iKSJEmSBoFmxmjvnpm7RsTtUM06EhHr1xyXJEmS1NGa6dF+odzdMaG6tTrwYq1RSZIkSR2umUT7K8D3gVdFxBnAjcDnao1KkiRJ6nDNzDpySUTMBvahmt7v0My8p/bIJEmSpA62ykQ7IkYDC4FLG8syc1GdgUmSJEmdrJmLIWdTjc8OYAtgQVl+bY1xSZIkSR2tmaEj23Q9jojbM3OXekOSJEmSOl8zF0MCUKb0c1o/SZIkqQnNjNH+3/LwTcC36w1HkiRJGhyaGaP9Bap5s+dl5kM1xyNJkiQNCs0k2nO6HpQZSABw1hH1ZNy0q1ra/5Txy5jS4jEkSZIGgmYS7ceAR4FnqWYeAWcdkSRJekmrHU2tmnvmQW2tXz1r5mLI44B5wNnAtpm5TWaaZEuSJEkrscpEOzO/AbwN2AD4eURMrj0qSZIkqcOtMtGOiMOAg4C5wNeBUyPi1zXHJUmSJHW0ZsZoH9xteXYdgUiSJEmDSTN3hpy6JgKRJEmSBpNmblgzs6fyzDyk/8ORJEmSBodmho68CTi27kAkSZKkwaSZRHtJZt5QeySSJEnSINLMPNo7RcQTEfHHiLgtIs6JiM1qj0ySJEnqYM3Mo70uMBp4HXAE8Edges1xSZIkSR2tmR5tMvPFzHw6M+/LzDOAH9UclyRJktTRmhmjTUQcAuxVFm/IzHPqC0mSJEnqfM3cGfLzwEeAu8vPSRHxuboDkyRJkjpZMz3aBwE7Z+aLABExHbgd+ESdgUmSJEmdrKkx2sCohscb1xCHJEmSNKg006P9eeD2iPgpEFRjtT9ea1SSJElSh1tlop2Zl0bELOAtpejUzPxjrVFJkiRJHa7XoSMRcVDX48xckJkzM3Mm8HREOOuIJEmStBIrG6P9pYj428aCiPgb4E5gYa1RSZIkSR1uZUNH9gKuioixwAzgXOAF4F2Z+cCaCE6SJEnqVL32aGfmAuAdwNuperG/kZkHmGRLkiRJq7bS6f0ycwlwAHAZMDkihq6RqCRJkqQO1+vQkYhYAmTXIrARsCgilgOZmSPXQHySJElSR+o10c7MEWsyEEmSJGkwafbOkH0WEVtHxE8j4u6I+E1EfKSUj46IayPivvJ7k1IeEfGViLg/Iu6MiF0bjnVM2f6+iDimrpglSZKk/lJbog0sA07JzO2BPYDjI2J7YBpwfWZuC1xflqEaC75t+TkO+BpUiTlwGrA7sBtwWldyLkmSJA1UtSXa5SY3t5XHS4B7gK2AScD0stl04NDyeBLwzazcBIyKiC2A/YBrM3NRZi4GrgX2rytuSZIkqT9EZq56q1YriRgH/AzYEfh9Zo4q5QEszsxREXElcGZm3ljWXQ+cCkwEhmbmZ0v5vwDPZuYXutVxHFVPOGPGjHnzjBkzan9ePVm6dCnDhw9vS90DwZz5T7a0/5hh8Oiz/RTMWsj2a43t1xrbrzW2X2vW9vYbv9XGLe2/tucvrdh7771nZ+aEntat7IY1/SIihgPfA07OzKeq3LqSmRkR/ZLpZ+Z5wHkAEyZMyIkTJ/bHYfts1qxZtKvugWDKtKta2v+U8cs4e07tp+WgZfu1xvZrje3XGtuvNWt7+82dPLGl/df2/KUudY7RJiLWo0qyL8nM/ynFj5YhIZTfXbdznw9s3bD72FLWW7kkSZI0YNU560gA5wP3ZOZ/NKyaCXTNHHIMcEVD+dFl9pE9gCfL3SmvAfaNiE3KRZD7ljJJkiRpwKrzO5Y9gQ8AcyLijlL2CeBM4LKI+CDwMPC+su5q4EDgfuAZYCpAZi6KiM8At5TtTs/MRTXGLUmSJLWstkS7XNQYvazep4ftEzi+l2NdAFzQf9FJkiRJ9ap1jLYkSZK0tjLRliRJkmpgoi1JkiTVwERbkiRJqoGJtiRJklQDE21JkiSpBibakiRJUg1MtCVJkqQamGhLkiRJNTDRliRJkmpgoi1JkiTVwERbkiRJqoGJtiRJklQDE21JkiSpBibakiRJUg1MtCVJkqQamGhLkiRJNTDRliRJkmpgoi1JkiTVwERbkiRJqsGQdgcgSZKk1oybdlVL+58yfhlTWjxGO80986B2h9Aje7QlSZKkGtij3c/mzH+yoz8RSpIkqX/Yoy1JkiTVwERbkiRJqoGJtiRJklQDE21JkiSpBibakiRJUg1MtCVJkqQamGhLkiRJNTDRliRJkmpgoi1JkiTVwERbkiRJqoGJtiRJklQDE21JkiSpBibakiRJUg1MtCVJkqQamGhLkiRJNTDRliRJkmpgoi1JkiTVwERbkiRJqoGJtiRJklQDE21JkiSpBrUl2hFxQUQsjIi7GspGR8S1EXFf+b1JKY+I+EpE3B8Rd0bErg37HFO2vy8ijqkrXkmSJKk/1dmjfRGwf7eyacD1mbktcH1ZBjgA2Lb8HAd8DarEHDgN2B3YDTitKzmXJEmSBrLaEu3M/BmwqFvxJGB6eTwdOLSh/JtZuQkYFRFbAPsB12bmosxcDFzLK5N3SZIkacAZsobrG5OZC8rjPwJjyuOtgEcatptXynorf4WIOI6qN5wxY8Ywa9as/ou6D8YMg1PGL2tL3YOB7dca2681tl9rbL/W2H6tsf1a0+nt1668b1XWdKL9kszMiMh+PN55wHkAEyZMyIkTJ/bXofvknEuu4Ow5bWvWjnfK+GW2Xwtsv9bYfq2x/Vpj+7XG9mtNp7ff3MkT2x1Cj9b0rCOPliEhlN8LS/l8YOuG7caWst7KJUmSpAFtTSfaM4GumUOOAa5oKD+6zD6yB/BkGWJyDbBvRGxSLoLct5RJkiRJA1pt3xFExKXARGCziJhHNXvImcBlEfFB4GHgfWXzq4EDgfuBZ4CpAJm5KCI+A9xStjs9M7tfYClJkiQNOLUl2pl5VC+r9ulh2wSO7+U4FwAX9GNokiRJUu28M6QkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTUw0ZYkSZJqYKItSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTUw0ZYkSZJqYKItSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTUw0ZYkSZJqYKItSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTUw0ZYkSZJqYKItSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINTLQlSZKkGphoS5IkSTUw0ZYkSZJqYKItSZIk1cBEW5IkSaqBibYkSZJUAxNtSZIkqQYm2pIkSVINOibRjoj9I+LeiLg/Iqa1Ox5JkiRpZToi0Y6IdYH/BA4AtgeOiojt2xuVJEmS1LuOSLSB3YD7M/PBzHwemAFManNMkiRJUq8iM9sdwypFxOHA/pl5bFn+ALB7Zp7QsM1xwHFlcTvg3jUeaGUz4LE21T0Y2H6tsf1aY/u1xvZrje3XGtuvNbbf6ntNZm7e04ohazqSumTmecB57Y4jIm7NzAntjqNT2X6tsf1aY/u1xvZrje3XGtuvNbZfPTpl6Mh8YOuG5bGlTJIkSRqQOiXRvgXYNiK2iYj1gSOBmW2OSZIkSepVRwwdycxlEXECcA2wLnBBZv6mzWH1pu3DVzqc7dca2681tl9rbL/W2H6tsf1aY/vVoCMuhpQkSZI6TacMHZEkSZI6iom2JEmSVAMT7X7iLeL7JiK2joifRsTdEfGbiPhIKf9URMyPiDvKz4HtjnWgioi5ETGntNOtpWx0RFwbEfeV35u0O86BKCK2azjH7oiIpyLiZM+/lYuICyJiYUTc1VDW4zkXla+Uv4l3RsSu7Yt8YOil/f49In5b2uj7ETGqlI+LiGcbzsWvty3wAaKX9uv1PRsRHy/n370RsV97oh44emm/7zS03dyIuKOUe/71E8do94Nyi/jfAX8FzKOaJeWozLy7rYENYBGxBbBFZt4WESOA2cChwPuApZn5hXbG1wkiYi4wITMfayj7N2BRZp5ZPvBtkpmntivGTlDev/OB3YGpeP71KiL2ApYC38zMHUtZj+dcSXhOBA6katsvZ+bu7Yp9IOil/fYFflIu+j8LoLTfOODKru3Ua/t9ih7esxGxPXAp1Z2ltwSuA96QmcvXaNADSE/t12392cCTmXm651//sUe7f3iL+D7KzAWZeVt5vAS4B9iqvVENCpOA6eXxdKoPL1q5fYAHMvPhdgcy0GXmz4BF3Yp7O+cmUf1Dz8y8CRhVPmCvtXpqv8z8cWYuK4s3Ud0nQj3o5fzrzSRgRmb+OTMfAu6n+l+91lpZ+0VEUHV0XbpGg1oLmGj3j62ARxqW52HS2LTyyXkX4OZSdEL5GvUChz6sVAI/jojZEXFcKRuTmQvK4z8CY9oTWkc5khX/uXj+9U1v55x/F/vub4EfNixvExG3R8QNEfH2dgXVAXp6z3r+9c3bgUcz876GMs+/fmCirbaKiOHA94CTM/Mp4GvA64CdgQXA2e2LbsB7W2buChwAHF++FnxJVuPCHBu2ElHdAOsQ4LulyPOvBZ5zqy8iPgksAy4pRQuAV2fmLsBHgW9HxMh2xTeA+Z7tH0exYoeD518/MdHuH94ifjVExHpUSfYlmfk/AJn5aGYuz8wXgf9mLf+qb2Uyc375vRD4PlVbPdr19Xz5vbB9EXaEA4DbMvNR8PxbTb2dc/5dbFJETAHeDUwuH1YoQx4eL49nAw8Ab2hbkAPUSt6znn9NioghwGHAd7rKPP/6j4l2//AW8X1UxoOdD9yTmf/RUN44hvOvgbu67yuIiI3KRaRExEbAvlRtNRM4pmx2DHBFeyLsGCv04nj+rZbezrmZwNFl9pE9qC6yWtDTAdZmEbE/8DHgkMx8pqF883KhLhHxWmBb4MH2RDlwreQ9OxM4MiI2iIhtqNrvV2s6vg7xLuC3mTmvq8Dzr/90xC3YB7oOu0X8QLEn8AFgTtd0QsAngKMiYmeqr5/nAh9qR3AdYAzw/erzCkOAb2fmjyLiFuCyiPgg8DDVxS3qQfmA8leseI79m+df7yLiUmAisFlEzANOA86k53PuaqoZR+4HnqGa0WWt1kv7fRzYALi2vJ9vyswPA3sBp0fEC8CLwIczs9kLAQelXtpvYk/v2cz8TURcBtxNNSTn+LV5xhHouf0y83xeeZ0KeP71G6f3kyRJkmrg0BFJkiSpBibakiRJUg1MtCVJkqQamGhLkiRJNTDRliRJkmpgoi1JbRQRYyPiioi4LyIeiIgvl/n4u9bvFRFXR8SvIuLKJo85ISK+EhHviojT64u+1/rnRsRma7peSRponN5Pktqk3LjpZuBrmXlhuUHEecCizPyniNge+DowJTM75mYRETEXmJCZj7U7FklqJ3u0Jal93gk8l5kXApQbavwD8LcRsSEwhepGHFdGxJyIOAIgIi6MiDsiYmlPB42I95ce8Dsi4r8a7vCWEXFmw3Y3RcSsHvafEhFfbVj+arlNOBHx5oi4ISJmR8Q1Dbdff1dE/C4iLgfWB86OiHsi4viy/pISz6KIeKg8/nBjXRGxXUQsi4jDW2pVSRogTLQlqX12AGY3FmTmU8DvgdcDmwPPA+OpbpP87xGxRWZOzcydezpgRLwJOALYs2yzHJhcVj8NvDki1o2IHfoabESsB5wDHJ6ZbwYuAM4oq/8TOAj4CDAcmA5MAE6OiM0zc3KJZybwT5m5c2Z+vVsVnwHu6WtckjRQeQt2SRq4Ari09HQ/GhE3AG+hSlYBhkXEHWW7G4CTgX2ANwO3lFt6DwMWNhzzGmB/YG/gQuCoXuo+IiLeVh5vBdwKbAfsyMu3C18XWBARmwDrZeZ9ABGxCLgzM58u8e0EXLfSJxoxgarzZ/bKtpOkTmKiLUntczewwjCJiBgJvBq4H3hqFfs/m5k7R8QQ4FqqXu8Apmfmx3vZ51vAucBIYAa9J9rfycwTSkxdw0gC+E1mvrVbzKNXEWesYj1UvdkfBU5tYltJ6ggOHZGk9rke2DAijgYoY6nPBi7KzGeoLpQ8ogz12BzYC/hV94Nk5jLgGaqx0dcDh0fEq8oxR0fEaxq2fRRYDHx3NeK9F9g8It5ajr1eROyQmYuA5RHx+ojYChgN/EVEbATsAty5iuO+A1iQmQ4bkTSo2KMtSW2SmRkRfw2cGxH/QtX5cTXwibLJDOAvqRLV5VRjm//YcIiuoSNDgN8A12TmCxHxz8CPI2Id4AXgeODhhnqPhZeGa/Ql3ufLhYpfiYiNS71fKnWfCPwQuANYChxN1XN+TknuV2ZbqvHdkjSoOL2fJKlfOb2fJFUcOiJJkiTVwB5tSZIkqQb2aEuSJEk1MNGWJEmSamCiLUmSJNXARFuSJEmqgYm2JEmSVIP/D0ogzL74FDngAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "features_train_2, features_valid_2, target_train_2, target_valid_2 = train_test_split(\n",
    "    features_2, target_2, test_size=.25, random_state=32123)\n",
    "fig = plt.figure(figsize = (12, 6))\n",
    "ax = fig.gca()\n",
    "hist2 = target_train_2.hist(\n",
    "    bins=19,\n",
    "    legend=True\n",
    ")\n",
    "pl.suptitle(\"Распределение запасов нефти третьего региона\")\n",
    "hist2.set_xlabel(\"Объём нефти\")\n",
    "hist2.set_ylabel(\"Количество скважин\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Изменения:</b> Изменён масштаб графика, добавлены подписи осей и название.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Объёмы нефти в скважинах третьего региона нормально распределены."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Среднее значение запаса нефти в скважине:  95.1 тыс. баррелей'"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f\"Среднее значение запаса нефти в скважине: {target_train_2.mean(): .3} тыс. баррелей\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>f0</th>\n",
       "      <th>f1</th>\n",
       "      <th>f2</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3qDeI</th>\n",
       "      <td>0.077896</td>\n",
       "      <td>0.111264</td>\n",
       "      <td>-1.244300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>pAa2b</th>\n",
       "      <td>0.247590</td>\n",
       "      <td>0.304486</td>\n",
       "      <td>-0.124648</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>VQYfj</th>\n",
       "      <td>0.556312</td>\n",
       "      <td>-0.973663</td>\n",
       "      <td>-0.583083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EPmVj</th>\n",
       "      <td>0.902398</td>\n",
       "      <td>0.930041</td>\n",
       "      <td>1.658478</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>n1gVE</th>\n",
       "      <td>-1.569647</td>\n",
       "      <td>-0.892592</td>\n",
       "      <td>0.587865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Vje6p</th>\n",
       "      <td>-1.086760</td>\n",
       "      <td>-0.088092</td>\n",
       "      <td>-0.194370</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>HJuG3</th>\n",
       "      <td>-1.255595</td>\n",
       "      <td>0.115245</td>\n",
       "      <td>0.574214</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>qYLbZ</th>\n",
       "      <td>-0.625456</td>\n",
       "      <td>0.423360</td>\n",
       "      <td>0.265543</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EBA2M</th>\n",
       "      <td>-1.371018</td>\n",
       "      <td>1.265440</td>\n",
       "      <td>-1.359392</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6bmIx</th>\n",
       "      <td>0.649020</td>\n",
       "      <td>-1.398595</td>\n",
       "      <td>-0.218432</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             f0        f1        f2\n",
       "id                                 \n",
       "3qDeI  0.077896  0.111264 -1.244300\n",
       "pAa2b  0.247590  0.304486 -0.124648\n",
       "VQYfj  0.556312 -0.973663 -0.583083\n",
       "EPmVj  0.902398  0.930041  1.658478\n",
       "n1gVE -1.569647 -0.892592  0.587865\n",
       "Vje6p -1.086760 -0.088092 -0.194370\n",
       "HJuG3 -1.255595  0.115245  0.574214\n",
       "qYLbZ -0.625456  0.423360  0.265543\n",
       "EBA2M -1.371018  1.265440 -1.359392\n",
       "6bmIx  0.649020 -1.398595 -0.218432"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 75000 entries, 3qDeI to OixjL\n",
      "Data columns (total 3 columns):\n",
      " #   Column  Non-Null Count  Dtype  \n",
      "---  ------  --------------  -----  \n",
      " 0   f0      75000 non-null  float64\n",
      " 1   f1      75000 non-null  float64\n",
      " 2   f2      75000 non-null  float64\n",
      "dtypes: float64(3)\n",
      "memory usage: 2.3+ MB\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "None"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>50%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>f0</th>\n",
       "      <td>75000.0</td>\n",
       "      <td>-5.115908e-18</td>\n",
       "      <td>1.000007</td>\n",
       "      <td>-5.052342</td>\n",
       "      <td>0.006086</td>\n",
       "      <td>4.176382</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f1</th>\n",
       "      <td>75000.0</td>\n",
       "      <td>-6.536993e-18</td>\n",
       "      <td>1.000007</td>\n",
       "      <td>-4.097313</td>\n",
       "      <td>-0.004978</td>\n",
       "      <td>4.543278</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>f2</th>\n",
       "      <td>75000.0</td>\n",
       "      <td>4.732215e-17</td>\n",
       "      <td>1.000007</td>\n",
       "      <td>-4.066936</td>\n",
       "      <td>-0.003283</td>\n",
       "      <td>4.098144</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      count          mean       std       min       50%       max\n",
       "f0  75000.0 -5.115908e-18  1.000007 -5.052342  0.006086  4.176382\n",
       "f1  75000.0 -6.536993e-18  1.000007 -4.097313 -0.004978  4.543278\n",
       "f2  75000.0  4.732215e-17  1.000007 -4.066936 -0.003283  4.098144"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Количество дублированных строк: 0\n"
     ]
    }
   ],
   "source": [
    "scaler = StandardScaler()\n",
    "scaler.fit(features_train_2)\n",
    "features_train_2 = pd.DataFrame(\n",
    "    scaler.transform(features_train_2),\n",
    "    columns=features_train_2.columns,\n",
    "    index=features_train_2.index)\n",
    "features_valid_2 = pd.DataFrame(\n",
    "    scaler.transform(features_valid_2),\n",
    "    columns=features_valid_2.columns,\n",
    "    index=features_valid_2.index)\n",
    "\n",
    "describe_dataframe(features_train_2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Данные нормализованы, не имеют пропусков и подготовлены для использования в обучении моделей.\n",
    "В целом данных выглядят следующим образом: в среднем больше всего нефти в третьем и первом регионах, ожидаемо именно в них будут самые большие показатели доходности шахт (доходность будет определяться по предсказанным значениям, поэтому уверенности в этом нет). При этом во втором регионе много объёмных шахт, при условии, что будут отбирать только самые объемные месторождения, сразу списывать со счетов его не стоит."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "<b>Успех:</b> Данные загружены и осмотрены корректно. Согласен, что колонка id нам не нужна.\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-danger\">\n",
    "<b>Ошибка:</b> Во всех графиках в проекте нужно подписать оси и названия, чтобы было понятно, что на нем визуализировано.\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-success\">\n",
    "<b>Успех:</b> Отлично, что scaler был обучен только на треине!\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Исправлено:</b> Изменены масштабы графиков, добавлены подписи осей и названия графиков.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Обучение и проверка модели"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Так как требуется определить объём запасов нефти в скважине (количественный признак), то необходимо использовать модели RandomForest и LinearRegression. Найдем лучшие модели для каждого датасета, проверку будем проводить по метрике RMSE (корень квадратный из средней квадратичной ошибки), т.к. она подходит для задачи регрессии. Однако финальное сравнение стоит провести в конце работы при расчёте прибыли и рисков, т.к. именно это - цель данного проекта."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Оценка адекватности моделей"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Сперва оценим адекватность моделей. Рассчитаем среднее значение объема скважины (валидационных данных, т.к. на них проверяются модели) и посчитаем MSE.\n",
    "Повторим для всех 3-х моделей."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE первой модели: 44.442944498974654\n"
     ]
    }
   ],
   "source": [
    "predictions = pd.Series(target_valid_0.mean(), index=target_valid_0.index)\n",
    "print(\"RMSE первой модели:\", mean_squared_error(target_valid_0, predictions)**0.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE второй модели: 46.10604333254927\n"
     ]
    }
   ],
   "source": [
    "predictions = pd.Series(target_valid_1.mean(), index=target_valid_1.index)\n",
    "print(\"RMSE второй модели:\", mean_squared_error(target_valid_1, predictions)**0.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE третьей модели: 44.778347592430094\n"
     ]
    }
   ],
   "source": [
    "predictions = pd.Series(target_valid_2.mean(), index=target_valid_2.index)\n",
    "print(\"RMSE третьей модели:\", mean_squared_error(target_valid_2, predictions)**0.5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Обучение моделей первого региона"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Обучим и проверим модель линейной регрессии для первого региона:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "linear_model0 = LinearRegression()\n",
    "linear_model0.fit(features_train_0, target_train_0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE модели линейной регрессии на валидационной выборке первого региона: 37.61902013878075\n"
     ]
    }
   ],
   "source": [
    "linear_model0_predictions_valid = linear_model0.predict(features_valid_0)\n",
    "linear_model0_result = mean_squared_error(target_valid_0, linear_model0_predictions_valid)**0.5\n",
    "print(f\"RMSE модели линейной регрессии на валидационной выборке первого региона: {linear_model0_result}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Найдем лучшую модель случайного леса для первого региона:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "best_rf_model0_dt_model, best_rf_model0_predicted_valid = None, None\n",
    "best_rf_model0_result, best_rf_model0_est, best_rf_model0_depth = 10000, 0, 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 14/14 [25:29<00:00, 109.27s/it]\n"
     ]
    }
   ],
   "source": [
    "for n_estimators in tqdm(range(10, 141, 10)):\n",
    "    for depth in range (1, 14):\n",
    "        rf_model0 = RandomForestRegressor(random_state=12345, max_depth=depth, n_estimators=n_estimators)\n",
    "        rf_model0.fit(features_train_0, target_train_0)\n",
    "        rf_model0_predictions_valid = rf_model0.predict(features_valid_0)\n",
    "        result = mean_squared_error(target_valid_0, rf_model0_predictions_valid)**0.5\n",
    "        if result < best_rf_model0_result:\n",
    "            best_rf_model0 = rf_model0\n",
    "            best_rf_model0_result = result\n",
    "            best_rf_model0_est = n_estimators\n",
    "            best_rf_model0_depth = depth\n",
    "            best_rf_model0_predicted_valid = rf_model0_predictions_valid"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE наилучшей модели случайного леса на валидационной выборке первого региона: 37.090735964043276\n"
     ]
    }
   ],
   "source": [
    "print(f\"RMSE наилучшей модели случайного леса на валидационной выборке первого региона: {best_rf_model0_result}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Среднее количество предсказанного сырья первого региона: 92.4\n"
     ]
    }
   ],
   "source": [
    "print(f\"Среднее количество предсказанного сырья первого региона: \"\n",
    "      f\"{best_rf_model0_predicted_valid.sum() / len(best_rf_model0_predicted_valid):.3}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Глубина: 9, количество деревьев: 140 наилучшей модели случайного леса первого региона\n"
     ]
    }
   ],
   "source": [
    "print(f\"Глубина: {best_rf_model0_depth}, количество деревьев: {best_rf_model0_est} наилучшей модели случайного леса первого региона\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Обучение моделей второго региона"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Обучим и проверим модель линейной регрессии для второго региона:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "linear_model1 = LinearRegression()\n",
    "linear_model1.fit(features_train_1, target_train_1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE модели линейной регрессии на валидационной выборке второго региона: 0.8937212510676176\n"
     ]
    }
   ],
   "source": [
    "linear_model1_predictions_valid = linear_model1.predict(features_valid_1)\n",
    "linear_model1_result = mean_squared_error(target_valid_1, linear_model1_predictions_valid)**0.5\n",
    "print(f\"RMSE модели линейной регрессии на валидационной выборке второго региона: {linear_model1_result}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Найдем лучшую модель случайного леса для второго региона:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [],
   "source": [
    "best_rf_model1_dt_model, best_rf_model1_predicted_valid = None, None\n",
    "best_rf_model1_result, best_rf_model1_est, best_rf_model1_depth = 10000, 0, 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 14/14 [28:07<00:00, 120.51s/it]\n"
     ]
    }
   ],
   "source": [
    "for n_estimators in tqdm(range(10, 141, 10)):\n",
    "    for depth in range (1, 14):\n",
    "        rf_model1 = RandomForestRegressor(random_state=12345, max_depth=depth, n_estimators=n_estimators)\n",
    "        rf_model1.fit(features_train_1, target_train_1)\n",
    "        rf_model1_predictions_valid = rf_model1.predict(features_valid_1)\n",
    "        result = mean_squared_error(target_valid_1, rf_model1_predictions_valid)**0.5\n",
    "        if result < best_rf_model1_result:\n",
    "            best_rf_model1 = rf_model1\n",
    "            best_rf_model1_result = result\n",
    "            best_rf_model1_est = n_estimators\n",
    "            best_rf_model1_depth = depth\n",
    "            best_rf_model1_predicted_valid = rf_model1_predictions_valid"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE наилучшей модели случайного леса на валидационной выборке: 0.7160936070080385\n"
     ]
    }
   ],
   "source": [
    "print(f\"RMSE наилучшей модели случайного леса на валидационной выборке: {best_rf_model1_result}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Среднее количество предсказанного сырья второго региона: 69.1\n"
     ]
    }
   ],
   "source": [
    "print(f\"Среднее количество предсказанного сырья второго региона: \"\n",
    "      f\"{best_rf_model1_predicted_valid.sum() / len(best_rf_model1_predicted_valid):.3}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Глубина: 7, количество деревьев: 130 наилучшей модели случайного леса второго региона\n"
     ]
    }
   ],
   "source": [
    "print(f\"Глубина: {best_rf_model1_depth}, количество деревьев: {best_rf_model1_est} наилучшей модели случайного леса второго региона\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Обучение моделей третьего региона"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Обучим и проверим модель линейной регрессии для третьего региона:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "linear_model2 = LinearRegression()\n",
    "linear_model2.fit(features_train_2, target_train_2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE модели линейной регрессии на валидационной выборке третьего региона: 40.0289907015887\n"
     ]
    }
   ],
   "source": [
    "linear_model2_predictions_valid = linear_model2.predict(features_valid_2)\n",
    "linear_model2_result = mean_squared_error(target_valid_2, linear_model2_predictions_valid)**0.5\n",
    "print(f\"RMSE модели линейной регрессии на валидационной выборке третьего региона: {linear_model2_result}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Найдем лучшую модель случайного леса для третьего региона:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [],
   "source": [
    "best_rf_model2_dt_model, best_rf_model2_predicted_valid = None, None\n",
    "best_rf_model2_result, best_rf_model2_est, best_rf_model2_depth = 10000, 0, 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 14/14 [29:13<00:00, 125.26s/it]\n"
     ]
    }
   ],
   "source": [
    "for n_estimators in tqdm(range(10, 141, 10)):\n",
    "    for depth in range (1, 14):\n",
    "        rf_model2 = RandomForestRegressor(random_state=12345, max_depth=depth, n_estimators=n_estimators)\n",
    "        rf_model2.fit(features_train_2, target_train_2)\n",
    "        rf_model2_predictions_valid = rf_model2.predict(features_valid_2)\n",
    "        result = mean_squared_error(target_valid_2, rf_model2_predictions_valid)**0.5\n",
    "        if result < best_rf_model2_result:\n",
    "            best_rf_model2 = rf_model2\n",
    "            best_rf_model2_result = result\n",
    "            best_rf_model2_est = n_estimators\n",
    "            best_rf_model2_depth = depth\n",
    "            best_rf_model2_predicted_valid = rf_model2_predictions_valid"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE наилучшей модели случайного леса на валидационной выборке третьего региона: 37.585150191382425\n"
     ]
    }
   ],
   "source": [
    "print(f\"RMSE наилучшей модели случайного леса на валидационной выборке третьего региона: {best_rf_model2_result}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Среднее количество предсказанного сырья третьего региона: 94.7\n"
     ]
    }
   ],
   "source": [
    "print(f\"Среднее количество предсказанного сырья третьего региона: \"\n",
    "      f\"{best_rf_model2_predicted_valid.sum() / len(best_rf_model2_predicted_valid):.3}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Глубина: 11, количество деревьев: 140 наилучшей модели случайного леса третьего региона\n"
     ]
    }
   ],
   "source": [
    "print(f\"Глубина: {best_rf_model2_depth}, количество деревьев: {best_rf_model2_est} наилучшей модели случайного леса третьего региона\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Данные второго региона распределены равномерно, данные первого и третьего регионов распределены нормально, поэтому средняя ошибка моделей гораздо выше.\n",
    "Лучше всего показали себя модели для второго региона, проверим их далее при расчете прибыли.\n",
    "Предсказания и правильные ответы на выборки были сохранены, все результаты продемонстрированы в ходе выполнения работы.\n",
    "Хоть предсказания для первого и третьего регионов гораздо хуже предсказаний второго региона, но все-же RMSE в них ниже порога адекватности на 25-30%, это говорит о целесообразности использования данных моделей.\n",
    "По средним показателям предсказанного сырья видно, что второй регион в среднем уступает по запасам нефти первому и третьему, его результат сильно хуже."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "<b>Успех:</b> Модели обучены корректно.\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-info\">\n",
    "<b>Совет: </b> На протяжении всего проекта происходит работа с 3мя одинаковыми таблицами. В связи с этим можно было использовать функции и/или циклы, чтобы избежать копирования кода.\n",
    "<br> Зачем его нужно избегать? Потому что очень часто оно приводит к ошибкам (например, забыл поменять одну из переменных). Впоследствии такие ошибки очень трудно найти.\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-warning\", padding: 15px\">\n",
    "<strong>Комментарий студента:</strong>\n",
    "    Да, была такая идея в начале работы с проектом.\n",
    "    Но решил, что так будет нагляднее или для каждого датасета что-то изменится при правках и комментариях.\n",
    "    Учту в последующей работе!\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Подготовка к расчёту прибыли"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Для того чтобы скважины окупились, их запасы нефти должны превышать значение 111.1 тыс. баррелей.\n",
    "Это число больше чем среднее значение любого региона. Это не страшно, так как будем выбирать самые объёмные из выборки."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Бюджет на разработку скважин в регионе — 10 млрд рублей."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [],
   "source": [
    "BUDGET_PER_WELL = 10000000000"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "При разведке региона исследуют 500 точек, из которых с помощью машинного обучения выбирают 200 лучших для разработки."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [],
   "source": [
    "POINTS = 500\n",
    "COUNT = 200"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "При нынешних ценах один баррель сырья приносит 450 рублей дохода. Доход с каждой единицы продукта составляет 450 тыс. рублей, поскольку объём указан в тысячах баррелей."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [],
   "source": [
    "PROFIT_PER_BARREL = 450000"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "После оценки рисков нужно оставить лишь те регионы, в которых вероятность убытков меньше 2.5%. Среди них выбирают регион с наибольшей средней прибылью."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Вероятность убытков - это процент убыточных скважин от общего их количества. Убыток — это отрицательная прибыль."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Применим технику Bootstrap с 1000 выборок, чтобы найти распределение прибыли."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [],
   "source": [
    "BOOTSTRAP_SAMPLES = 1000"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Доверительный интервал по условию = 95%"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [],
   "source": [
    "INTERVAL = .95"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-info\">\n",
    "\n",
    "<b>Совет: </b> В названиях константных переменных лучше использовать только БОЛЬШИЕ буквы. Это соглашение между программистами: https://pythonworld.ru/osnovy/pep-8-rukovodstvo-po-napisaniyu-koda-na-python.html#id29 .\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-success\">\n",
    "<b>Успех:</b> Точка безубыточности найдена верно, сравнение проведено!\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Расчёт прибыли и рисков"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Последовательность выполнения расчёта:\n",
    " 1) Возьмем 500 точек из всей выборки\n",
    " 2) Лучшей моделью предскажем объёмы нефти в них\n",
    " 3) Посчитаем прибыль 200 самых объёмных предсказанных точек\n",
    " 4) Повторим bootstrap_samples раз, запишем все результаты в один Series"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Напишем функцию для расчета прибыли profit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [],
   "source": [
    "def profit(target, predictions, count):\n",
    "    chosen = predictions.sort_values(\"product\", ascending=False)\n",
    "    product = target.loc[chosen.index][:count].sum()\n",
    "    return product * PROFIT_PER_BARREL - BUDGET_PER_WELL"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Для генерации одинаковой случайной последовательности чисел используем метод RandomState"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [],
   "source": [
    "rand_st = np.random.RandomState(32123)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Расчёт первого региона"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-danger\">\n",
    "<b>Ошибка:</b> В этом шаге, как и во всем проекте, можно использовать только линейную модель. Это требование заказчика.\n",
    "    \n",
    "В шаге с обучением моделей можно использовать случайный лес в исследовательских целях.\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Исправлено:</b> Удалил исследования на моделях случайного леса.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "<b>Успех (ревью 2):</b> ОК.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-info\">\n",
    "\n",
    "<b>Совет: </b> Лучше заменить `.sample(frac=...)` на `.sample(n=...)`\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Исправлено:</b> Заменил, как-то не догадался сам...\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-danger\">\n",
    "<b>Ошибка:</b> Для подсчета доверительного интервала стоит использовать метод квантилей, так как мы реализуем технику бутстрап.\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Исправлено:</b> Реализовал метод квантилей для подсчета доверительного интервала.\n",
    "</div>\n",
    "\n",
    "<div class=\"alert alert-block alert-info\">\n",
    "\n",
    "<b>Совет: </b> Риск можно было найти чуть проще: `(values < 0).mean()`, если объект типа pandas Series или numpy array.\n",
    "</div>\n",
    "    \n",
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Исправлено:</b> Поправил, так действительно нагляднее.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "<b>Успех (ревью 2):</b> Отлично!\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Модель LinearRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 1000/1000 [00:07<00:00, 142.17it/s]\n"
     ]
    }
   ],
   "source": [
    "profits0 = []\n",
    "features, target, model = pd.concat([features_valid_0, features_train_0]), target_0, linear_model0\n",
    "for i in tqdm(range(BOOTSTRAP_SAMPLES)):\n",
    "    subsample = features.sample(n=POINTS, replace=True, random_state=rand_st)\n",
    "    # subsample = features.sample(frac=(points / len(features)), replace=True, random_state=rand_st)\n",
    "    predictions = pd.DataFrame(\n",
    "        model.predict(subsample),\n",
    "        columns=[\"product\"],\n",
    "        index=subsample.index)\n",
    "    profits0.append(profit(\n",
    "        target,\n",
    "        predictions,\n",
    "        COUNT)\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Выборок с отрицательной прибылью: 52'"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Количество выборок скважин')"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = pd.Series(profits0)\n",
    "display(f\"Выборок с отрицательной прибылью: {(result < 0).sum()}\")\n",
    "# result.hist()\n",
    "\n",
    "fig = plt.figure(figsize = (12, 6))\n",
    "ax = fig.gca()\n",
    "result_hist0 = result.hist(\n",
    "    bins=16,\n",
    ")\n",
    "pl.suptitle(\"Распределение ожидаемого дохода от первого региона\")\n",
    "result_hist0.set_xlabel(\"Доход в миллиардах рублей\")\n",
    "result_hist0.set_ylabel(\"Количество выборок скважин\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Исправлено:</b> Изменил масштаб графика, добавил подписи осей и название.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Найдём среднюю прибыль, 95%-й доверительный интервал и риск убытков. Убыток — это отрицательная прибыль."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Средняя прибыль:  415787404.3  рублей'"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linear0_mean_profit = result.mean()\n",
    "display(f\"Средняя прибыль: {linear0_mean_profit: .10}  рублей\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "95%-ый доверительный интервал: от -86246676.41р. до  920171109.8р.\n"
     ]
    }
   ],
   "source": [
    "# linear0_min_edge, linear0_max_edge = st.t.interval(\n",
    "#     interval, len(result)-1, linear0_mean_profit, result.sem()\n",
    "# )\n",
    "linear0_min_edge, linear0_max_edge = result.quantile(.025), result.quantile(.975)\n",
    "print(f\"95%-ый доверительный интервал: от {linear0_min_edge: .10}р. до {linear0_max_edge: .10}р.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Процент отрицательной прибыли:  5.2%'"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# display(f\"Процент отрицательной прибыли: {len(result[result < 0]) / len(result): .1%}\")\n",
    "f\"Процент отрицательной прибыли: {(result < 0).mean(): .1%}\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Расчёт второго региона"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Модель LinearRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 1000/1000 [00:06<00:00, 143.56it/s]\n"
     ]
    }
   ],
   "source": [
    "profits1 = []\n",
    "features, target, model = pd.concat([features_valid_1, features_train_1]), target_1, linear_model1\n",
    "for i in tqdm(range(BOOTSTRAP_SAMPLES)):\n",
    "    subsample = features.sample(n=POINTS, replace=True, random_state=rand_st)\n",
    "    # subsample = features.sample(frac=(points / len(features)), replace=False, random_state=rand_st)\n",
    "    predictions = pd.DataFrame(\n",
    "        model.predict(subsample),\n",
    "        columns=[\"product\"],\n",
    "        index=subsample.index)\n",
    "    profits1.append(profit(\n",
    "        target,\n",
    "        predictions,\n",
    "        COUNT)\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Выборок с отрицательной прибылью: 16'"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Количество выборок скважин')"
      ]
     },
     "execution_count": 148,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = pd.Series(profits1)\n",
    "display(f\"Выборок с отрицательной прибылью: {(result < 0).sum()}\")\n",
    "# result.hist()\n",
    "\n",
    "fig = plt.figure(figsize = (12, 6))\n",
    "ax = fig.gca()\n",
    "result_hist1 = result.hist(\n",
    "    bins=16,\n",
    ")\n",
    "pl.suptitle(\"Распределение ожидаемого дохода от второго региона\")\n",
    "result_hist1.set_xlabel(\"Доход в миллиардах рублей\")\n",
    "result_hist1.set_ylabel(\"Количество выборок скважин\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Исправлено:</b> Изменил масштаб графика, добавил подписи осей и название.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Найдём среднюю прибыль, 95%-й доверительный интервал и риск убытков. Убыток — это отрицательная прибыль."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Средняя прибыль:  454443335.7  рублей'"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linear1_mean_profit = result.mean()\n",
    "display(f\"Средняя прибыль: {linear1_mean_profit: .10}  рублей\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "95%-ый доверительный интервал: от  30887787.27р. до  854404248.2р.\n"
     ]
    }
   ],
   "source": [
    "# linear1_min_edge, linear1_max_edge = st.t.interval(\n",
    "#     interval, len(result)-1, linear1_mean_profit, result.sem()\n",
    "# )\n",
    "linear1_min_edge, linear1_max_edge = result.quantile(.025), result.quantile(.975)\n",
    "print(f\"95%-ый доверительный интервал: от {linear1_min_edge: .10}р. до {linear1_max_edge: .10}р.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Процент отрицательной прибыли:  1.6%'"
      ]
     },
     "execution_count": 151,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# display(f\"Процент отрицательной прибыли: {len(result[result < 0]) / len(result): .1%}\")\n",
    "f\"Процент отрицательной прибыли: {(result < 0).mean(): .1%}\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Расчёт третьего региона"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Модель LinearRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 1000/1000 [00:08<00:00, 114.71it/s]\n"
     ]
    }
   ],
   "source": [
    "profits2 = []\n",
    "features, target, model = pd.concat([features_valid_2, features_train_2]), target_2, linear_model2\n",
    "for i in tqdm(range(BOOTSTRAP_SAMPLES)):\n",
    "    subsample = features.sample(n=POINTS, replace=True, random_state=rand_st)\n",
    "    # subsample = features.sample(frac=(points / len(features)), replace=False, random_state=rand_st)\n",
    "    predictions = pd.DataFrame(\n",
    "        model.predict(subsample),\n",
    "        columns=[\"product\"],\n",
    "        index=subsample.index)\n",
    "    profits2.append(profit(\n",
    "        target,\n",
    "        predictions,\n",
    "        COUNT)\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Выборок с отрицательной прибылью: 77'"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Количество выборок скважин')"
      ]
     },
     "execution_count": 153,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "result = pd.Series(profits2)\n",
    "display(f\"Выборок с отрицательной прибылью: {(result < 0).sum()}\")\n",
    "# result.hist()\n",
    "\n",
    "fig = plt.figure(figsize = (12, 6))\n",
    "ax = fig.gca()\n",
    "result_hist1 = result.hist(\n",
    "    bins=16,\n",
    ")\n",
    "pl.suptitle(\"Распределение ожидаемого дохода от третьего региона\")\n",
    "result_hist1.set_xlabel(\"Доход в миллиардах рублей\")\n",
    "result_hist1.set_ylabel(\"Количество выборок скважин\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Исправлено:</b> Изменил масштаб графика, добавил подписи осей и название.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Найдём среднюю прибыль, 95%-й доверительный интервал и риск убытков. Убыток — это отрицательная прибыль."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Средняя прибыль:  375511015.1  рублей'"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linear2_mean_profit = result.mean()\n",
    "display(f\"Средняя прибыль: {linear2_mean_profit: .10}  рублей\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "95%-ый доверительный интервал: от -157393963.7р. до  887796804.1р.\n"
     ]
    }
   ],
   "source": [
    "# linear2_min_edge, linear2_max_edge = st.t.interval(\n",
    "#     interval, len(result)-1, linear2_mean_profit, result.sem()\n",
    "# )\n",
    "linear2_min_edge, linear2_max_edge = result.quantile(.025), result.quantile(.975)\n",
    "print(f\"95%-ый доверительный интервал: от {linear2_min_edge: .10}р. до {linear2_max_edge: .10}р.\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Процент отрицательной прибыли:  7.7%'"
      ]
     },
     "execution_count": 160,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# display(f\"Процент отрицательной прибыли: {len(result[result < 0]) / len(result): .1%}\")\n",
    "f\"Процент отрицательной прибыли: {(result < 0).mean(): .1%}\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Вывод: Судя по результатам оценки модели линейной регрессии - наиболее прибыльные регионы это 2-й (454.5 млн. р.) и 1-й (415.8 млн. р.).\n",
    "Так как по условию требуется отсеить те регионы, в которых риск убытков выше 5% - остается только 2-й регион.\n",
    "Во 2-м регионе вероятность убытков всего 1.8%, а средний ожидаемый объем прибыли превышает остальные регионы.\n",
    "Выбор падает на второй регион."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Выводы"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Для добывающей компании была обучена модель для выбора локации бурения скважины.\n",
    "Для этого были исследованы 3 различных региона добычи, для каждого была обучена отдельная модель.\n",
    "Перед исследованием была проведена работа над входными данными - разделение на выборки и последующая нормализация.\n",
    "Далее были построены модели для предсказания объёма запасов в новых скважинах и на этих предсказаниях отобраны скважины с самыми высокими оценками значений. Затем уже был определён регион с максимальной суммарной прибылью отобранных скважин.\n",
    "\n",
    "По предсказаниям наилучших моделей прибыль регионов такова:\n",
    "1) 1-й регион:  415.8 млн. р. средней прибыли в интервале от -84 млн. р. до 920 млн. р. Процент отрицательной прибыли: 5.2%\n",
    "2) 2-й регион:  433.6 млн. р. средней прибыли в интервале от 31 млн. р. до 854 млн. р. Процент отрицательной прибыли: 1.8%\n",
    "3) 3-й регион:  375.9 млн. р. средней прибыли в интервале от -157 млн. р. до 888 млн. р. Процент отрицательной прибыли: 7.7%\n",
    "\n",
    "В первом и третьем регионах вероятность убытков выше 5%, что по условиям заказчика недопустимо, поэтому данные регионы отпадают. По итогам исследования был выбран второй регион, как регион с самым высоким показателем средней ожидаемой прибыли и с самой низкой вероятностью убытков."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Исправлено:</b> Оба вывода переосмыслены в связи с правками.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "<b>Успех (ревью 2):</b> Приятно видеть вывод в конце проекта! С выбором региона согласен.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Чек-лист готовности проекта"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Поставьте 'x' в выполненных пунктах. Далее нажмите Shift+Enter."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- [x]  Jupyter Notebook открыт\n",
    "- [ ]  Весь код выполняется без ошибок\n",
    "- [ ]  Ячейки с кодом расположены в порядке исполнения\n",
    "- [ ]  Выполнен шаг 1: данные подготовлены\n",
    "- [ ]  Выполнен шаг 2: модели обучены и проверены\n",
    "    - [ ]  Данные корректно разбиты на обучающую и валидационную выборки\n",
    "    - [ ]  Модели обучены, предсказания сделаны\n",
    "    - [ ]  Предсказания и правильные ответы на валидационной выборке сохранены\n",
    "    - [ ]  На экране напечатаны результаты\n",
    "    - [ ]  Сделаны выводы\n",
    "- [ ]  Выполнен шаг 3: проведена подготовка к расчёту прибыли\n",
    "    - [ ]  Для всех ключевых значений созданы константы Python\n",
    "    - [ ]  Посчитано минимальное среднее количество продукта в месторождениях региона, достаточное для разработки\n",
    "    - [ ]  По предыдущему пункту сделаны выводы\n",
    "    - [ ]  Написана функция расчёта прибыли\n",
    "- [ ]  Выполнен шаг 4: посчитаны риски и прибыль\n",
    "    - [ ]  Проведена процедура *Bootstrap*\n",
    "    - [ ]  Все параметры бутстрепа соответствуют условию\n",
    "    - [ ]  Найдены все нужные величины\n",
    "    - [ ]  Предложен регион для разработки месторождения\n",
    "    - [ ]  Выбор региона обоснован"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "ExecuteTimeLog": [
   {
    "duration": 45,
    "start_time": "2023-04-25T07:19:54.693Z"
   },
   {
    "duration": 1064,
    "start_time": "2023-04-25T07:20:00.092Z"
   },
   {
    "duration": 3,
    "start_time": "2023-04-25T07:20:01.158Z"
   },
   {
    "duration": 1739,
    "start_time": "2023-04-25T07:20:01.162Z"
   },
   {
    "duration": 3,
    "start_time": "2023-04-25T07:20:02.903Z"
   },
   {
    "duration": 110,
    "start_time": "2023-04-25T07:20:02.907Z"
   },
   {
    "duration": 8,
    "start_time": "2023-04-25T07:20:03.019Z"
   },
   {
    "duration": 603,
    "start_time": "2023-04-25T07:20:06.967Z"
   },
   {
    "duration": 152,
    "start_time": "2023-04-25T07:20:24.788Z"
   },
   {
    "duration": 182,
    "start_time": "2023-04-25T07:21:53.442Z"
   },
   {
    "duration": 294,
    "start_time": "2023-04-25T07:25:32.924Z"
   },
   {
    "duration": 192,
    "start_time": "2023-04-25T07:25:46.935Z"
   },
   {
    "duration": 272,
    "start_time": "2023-04-25T07:26:54.563Z"
   },
   {
    "duration": 232,
    "start_time": "2023-04-25T07:27:11.239Z"
   },
   {
    "duration": 194,
    "start_time": "2023-04-25T07:27:18.750Z"
   },
   {
    "duration": 204,
    "start_time": "2023-04-25T07:28:06.781Z"
   },
   {
    "duration": 76,
    "start_time": "2023-04-25T07:32:17.795Z"
   },
   {
    "duration": 171,
    "start_time": "2023-04-25T07:32:21.345Z"
   },
   {
    "duration": 189,
    "start_time": "2023-04-25T07:32:31.197Z"
   },
   {
    "duration": 192,
    "start_time": "2023-04-25T07:32:39.642Z"
   },
   {
    "duration": 11,
    "start_time": "2023-04-25T07:33:21.278Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T07:33:27.704Z"
   },
   {
    "duration": 19,
    "start_time": "2023-04-25T07:33:27.710Z"
   },
   {
    "duration": 426,
    "start_time": "2023-04-25T07:33:27.731Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T07:33:28.160Z"
   },
   {
    "duration": 123,
    "start_time": "2023-04-25T07:33:28.166Z"
   },
   {
    "duration": 9,
    "start_time": "2023-04-25T07:33:28.291Z"
   },
   {
    "duration": 259,
    "start_time": "2023-04-25T07:33:28.302Z"
   },
   {
    "duration": 5,
    "start_time": "2023-04-25T07:33:28.563Z"
   },
   {
    "duration": 85,
    "start_time": "2023-04-25T07:33:28.570Z"
   },
   {
    "duration": 98,
    "start_time": "2023-04-25T07:33:28.658Z"
   },
   {
    "duration": 8,
    "start_time": "2023-04-25T07:33:28.758Z"
   },
   {
    "duration": 272,
    "start_time": "2023-04-25T07:33:28.768Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T07:33:29.042Z"
   },
   {
    "duration": 68,
    "start_time": "2023-04-25T07:33:29.056Z"
   },
   {
    "duration": 109,
    "start_time": "2023-04-25T07:33:29.125Z"
   },
   {
    "duration": 21,
    "start_time": "2023-04-25T07:33:29.236Z"
   },
   {
    "duration": 262,
    "start_time": "2023-04-25T07:33:29.259Z"
   },
   {
    "duration": 502,
    "start_time": "2023-04-25T07:36:05.459Z"
   },
   {
    "duration": 242,
    "start_time": "2023-04-25T07:36:15.835Z"
   },
   {
    "duration": 95,
    "start_time": "2023-04-25T07:36:24.240Z"
   },
   {
    "duration": 211,
    "start_time": "2023-04-25T07:36:30.240Z"
   },
   {
    "duration": 213,
    "start_time": "2023-04-25T07:36:37.768Z"
   },
   {
    "duration": 209,
    "start_time": "2023-04-25T07:36:49.537Z"
   },
   {
    "duration": 270,
    "start_time": "2023-04-25T07:38:03.809Z"
   },
   {
    "duration": 263,
    "start_time": "2023-04-25T07:38:08.055Z"
   },
   {
    "duration": 193,
    "start_time": "2023-04-25T07:38:18.285Z"
   },
   {
    "duration": 259,
    "start_time": "2023-04-25T07:38:27.141Z"
   },
   {
    "duration": 250,
    "start_time": "2023-04-25T07:38:32.565Z"
   },
   {
    "duration": 307,
    "start_time": "2023-04-25T07:38:38.246Z"
   },
   {
    "duration": 84,
    "start_time": "2023-04-25T07:39:48.823Z"
   },
   {
    "duration": 38,
    "start_time": "2023-04-25T07:39:54.503Z"
   },
   {
    "duration": 11,
    "start_time": "2023-04-25T07:40:22.492Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T07:41:24.774Z"
   },
   {
    "duration": 319,
    "start_time": "2023-04-25T07:41:30.891Z"
   },
   {
    "duration": 388,
    "start_time": "2023-04-25T07:41:39.133Z"
   },
   {
    "duration": 236,
    "start_time": "2023-04-25T07:41:44.648Z"
   },
   {
    "duration": 210,
    "start_time": "2023-04-25T07:41:50.979Z"
   },
   {
    "duration": 210,
    "start_time": "2023-04-25T07:42:00.048Z"
   },
   {
    "duration": 211,
    "start_time": "2023-04-25T07:42:09.283Z"
   },
   {
    "duration": 256,
    "start_time": "2023-04-25T07:42:15.839Z"
   },
   {
    "duration": 139,
    "start_time": "2023-04-25T07:44:35.481Z"
   },
   {
    "duration": 186,
    "start_time": "2023-04-25T07:45:55.439Z"
   },
   {
    "duration": 244,
    "start_time": "2023-04-25T07:46:02.106Z"
   },
   {
    "duration": 5,
    "start_time": "2023-04-25T07:46:28.238Z"
   },
   {
    "duration": 220,
    "start_time": "2023-04-25T07:46:34.665Z"
   },
   {
    "duration": 211,
    "start_time": "2023-04-25T07:47:02.375Z"
   },
   {
    "duration": 276,
    "start_time": "2023-04-25T07:47:29.356Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T07:57:23.927Z"
   },
   {
    "duration": 10,
    "start_time": "2023-04-25T07:57:23.934Z"
   },
   {
    "duration": 453,
    "start_time": "2023-04-25T07:57:23.946Z"
   },
   {
    "duration": 3,
    "start_time": "2023-04-25T07:57:24.401Z"
   },
   {
    "duration": 131,
    "start_time": "2023-04-25T07:57:24.407Z"
   },
   {
    "duration": 19,
    "start_time": "2023-04-25T07:57:24.539Z"
   },
   {
    "duration": 277,
    "start_time": "2023-04-25T07:57:24.564Z"
   },
   {
    "duration": 5,
    "start_time": "2023-04-25T07:57:24.842Z"
   },
   {
    "duration": 109,
    "start_time": "2023-04-25T07:57:24.848Z"
   },
   {
    "duration": 111,
    "start_time": "2023-04-25T07:57:24.960Z"
   },
   {
    "duration": 10,
    "start_time": "2023-04-25T07:57:25.073Z"
   },
   {
    "duration": 289,
    "start_time": "2023-04-25T07:57:25.085Z"
   },
   {
    "duration": 5,
    "start_time": "2023-04-25T07:57:25.376Z"
   },
   {
    "duration": 97,
    "start_time": "2023-04-25T07:57:25.382Z"
   },
   {
    "duration": 110,
    "start_time": "2023-04-25T07:57:25.482Z"
   },
   {
    "duration": 12,
    "start_time": "2023-04-25T07:57:25.594Z"
   },
   {
    "duration": 300,
    "start_time": "2023-04-25T07:57:25.608Z"
   },
   {
    "duration": 5,
    "start_time": "2023-04-25T07:57:25.910Z"
   },
   {
    "duration": 82,
    "start_time": "2023-04-25T07:57:25.916Z"
   },
   {
    "duration": 9,
    "start_time": "2023-04-25T07:57:25.999Z"
   },
   {
    "duration": 14,
    "start_time": "2023-04-25T07:57:26.010Z"
   },
   {
    "duration": 40,
    "start_time": "2023-04-25T07:57:26.025Z"
   },
   {
    "duration": 18,
    "start_time": "2023-04-25T07:57:26.067Z"
   },
   {
    "duration": 175,
    "start_time": "2023-04-25T07:57:26.089Z"
   },
   {
    "duration": 5,
    "start_time": "2023-04-25T07:57:26.275Z"
   },
   {
    "duration": 1530086,
    "start_time": "2023-04-25T07:57:26.284Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T08:22:56.372Z"
   },
   {
    "duration": 14,
    "start_time": "2023-04-25T08:22:56.380Z"
   },
   {
    "duration": 14,
    "start_time": "2023-04-25T08:22:56.396Z"
   },
   {
    "duration": 19,
    "start_time": "2023-04-25T08:22:56.412Z"
   },
   {
    "duration": 35,
    "start_time": "2023-04-25T08:22:56.433Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T08:22:56.471Z"
   },
   {
    "duration": 1687270,
    "start_time": "2023-04-25T08:22:56.477Z"
   },
   {
    "duration": 34,
    "start_time": "2023-04-25T08:51:03.750Z"
   },
   {
    "duration": 14,
    "start_time": "2023-04-25T08:51:03.797Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T08:51:03.814Z"
   },
   {
    "duration": 33,
    "start_time": "2023-04-25T08:51:03.819Z"
   },
   {
    "duration": 113,
    "start_time": "2023-04-25T08:51:03.854Z"
   },
   {
    "duration": 9,
    "start_time": "2023-04-25T08:51:03.970Z"
   },
   {
    "duration": 1753720,
    "start_time": "2023-04-25T08:51:03.985Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T09:20:17.707Z"
   },
   {
    "duration": 10,
    "start_time": "2023-04-25T09:20:17.713Z"
   },
   {
    "duration": 6,
    "start_time": "2023-04-25T09:20:17.725Z"
   },
   {
    "duration": 25,
    "start_time": "2023-04-25T09:20:17.733Z"
   },
   {
    "duration": 12,
    "start_time": "2023-04-25T09:20:17.760Z"
   },
   {
    "duration": 8,
    "start_time": "2023-04-25T09:20:17.778Z"
   },
   {
    "duration": 3,
    "start_time": "2023-04-25T09:20:17.795Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T09:20:17.800Z"
   },
   {
    "duration": 0,
    "start_time": "2023-04-25T09:20:17.925Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T09:22:16.313Z"
   },
   {
    "duration": 3,
    "start_time": "2023-04-25T09:22:17.619Z"
   },
   {
    "duration": 3,
    "start_time": "2023-04-25T09:22:19.334Z"
   },
   {
    "duration": 3,
    "start_time": "2023-04-25T09:22:20.707Z"
   },
   {
    "duration": 3,
    "start_time": "2023-04-25T09:22:22.405Z"
   },
   {
    "duration": 3,
    "start_time": "2023-04-25T09:22:24.802Z"
   },
   {
    "duration": 3,
    "start_time": "2023-04-25T09:22:26.334Z"
   },
   {
    "duration": 7500,
    "start_time": "2023-04-25T09:22:55.957Z"
   },
   {
    "duration": 270,
    "start_time": "2023-04-25T09:23:08.702Z"
   },
   {
    "duration": 3,
    "start_time": "2023-04-25T09:24:31.899Z"
   },
   {
    "duration": 7067,
    "start_time": "2023-04-25T09:24:34.402Z"
   },
   {
    "duration": 247,
    "start_time": "2023-04-25T09:25:16.675Z"
   },
   {
    "duration": 224,
    "start_time": "2023-04-25T09:25:26.230Z"
   },
   {
    "duration": 203,
    "start_time": "2023-04-25T09:25:37.474Z"
   },
   {
    "duration": 90,
    "start_time": "2023-04-25T09:25:45.182Z"
   },
   {
    "duration": 92,
    "start_time": "2023-04-25T09:25:49.003Z"
   },
   {
    "duration": 5,
    "start_time": "2023-04-25T09:25:58.813Z"
   },
   {
    "duration": 7,
    "start_time": "2023-04-25T09:26:01.294Z"
   },
   {
    "duration": 5,
    "start_time": "2023-04-25T09:26:41.456Z"
   },
   {
    "duration": 14,
    "start_time": "2023-04-25T09:27:53.188Z"
   },
   {
    "duration": 7584,
    "start_time": "2023-04-25T09:28:00.642Z"
   },
   {
    "duration": 280,
    "start_time": "2023-04-25T09:28:15.614Z"
   },
   {
    "duration": 283,
    "start_time": "2023-04-25T09:28:19.753Z"
   },
   {
    "duration": 96,
    "start_time": "2023-04-25T09:28:26.994Z"
   },
   {
    "duration": 6,
    "start_time": "2023-04-25T09:28:34.809Z"
   },
   {
    "duration": 7,
    "start_time": "2023-04-25T09:28:38.744Z"
   },
   {
    "duration": 8,
    "start_time": "2023-04-25T09:28:41.178Z"
   },
   {
    "duration": 7271,
    "start_time": "2023-04-25T09:29:12.832Z"
   },
   {
    "duration": 14,
    "start_time": "2023-04-25T09:29:22.356Z"
   },
   {
    "duration": 6990,
    "start_time": "2023-04-25T09:29:33.798Z"
   },
   {
    "duration": 261,
    "start_time": "2023-04-25T09:29:42.812Z"
   },
   {
    "duration": 6,
    "start_time": "2023-04-25T09:29:46.036Z"
   },
   {
    "duration": 8,
    "start_time": "2023-04-25T09:29:47.923Z"
   },
   {
    "duration": 7,
    "start_time": "2023-04-25T09:29:51.032Z"
   },
   {
    "duration": 8745,
    "start_time": "2023-04-25T09:29:55.747Z"
   },
   {
    "duration": 213,
    "start_time": "2023-04-25T09:30:18.139Z"
   },
   {
    "duration": 4,
    "start_time": "2023-04-25T09:30:27.488Z"
   },
   {
    "duration": 6,
    "start_time": "2023-04-25T09:30:30.088Z"
   },
   {
    "duration": 6,
    "start_time": "2023-04-25T09:30:32.361Z"
   },
   {
    "duration": 95,
    "start_time": "2023-04-25T09:33:37.534Z"
   },
   {
    "duration": 5,
    "start_time": "2023-04-25T09:33:47.875Z"
   },
   {
    "duration": 6,
    "start_time": "2023-04-25T09:33:49.631Z"
   },
   {
    "duration": 10,
    "start_time": "2023-04-25T09:33:51.457Z"
   }
  ],
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
